PHP Funktionen und Referenzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Funktionen und Referenzen

    Hallo,

    wie ist das, wenn ich versuche mit einer Referenz bei PHP-Funktionen zu arbeiten. Funktioniert das?

    Bsp.

    $foo =& md5('foo');

    Geht das überhaupt? Bekomme ich dann die Referenz auf den Wert geliefert? Weil in der Doku steht:

    Anmerkung: Im Gegensatz zur Parameterübergabe per Referenz ist bei der Rückgabe mittels Referenz an beiden Stellen die Angabe des & notwendig.
    Demnach würde es nicht gehen. Oder?

  • #2
    grundsätzlich schon. aber die frage ist, ob md5() dies bereits zulässt.

    bei selbergeschriebenen fkts kannst du dies ja entsprechend anpassen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Darum gehts mir. Ich arbeite mit großen Strings. Diese bearbeite ich mit diversen PHP-Funktionen. Leider kann ich da nichts mit eigenen Funktionen machen.

      Deshalb bin ich etwas verwirrt - was in der Doku drinsteht. Demnach hat man keine Chance das Kopieren bei den Standardfunktionen zu verhindern.

      Kommentar


      • #4
        Original geschrieben von phpaule
        Darum gehts mir. Ich arbeite mit großen Strings. Diese bearbeite ich mit diversen PHP-Funktionen. Leider kann ich da nichts mit eigenen Funktionen machen.

        Deshalb bin ich etwas verwirrt - was in der Doku drinsteht. Demnach hat man keine Chance das Kopieren bei den Standardfunktionen zu verhindern.
        nein, man kann das Kopieren nicht verhindern. Du kannst höchstens
        PHP-Code:
        $text md5($text); 
        machen, sodass der Müll gleich überschrieben wird ... aber selbst wenn, der GC von php räumt afaik eh nicht sofort weg...

        Wie groß ist denn "groß"?

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Original geschrieben von phpaule
          Demnach hat man keine Chance das Kopieren bei den Standardfunktionen zu verhindern.
          Welches "Kopieren"?

          Eine Stringfunktion liefert dir idR. einen String als Rückgabewert. Den legst du dann in einer Variablen ab. Und wo wird jetzt was "kopiert"?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Du bekommst den md5-Hashwert des strings foo, $foo ist allerdings keine Referenz.

            Wenn es eine wäre, könntest du mit
            PHP-Code:
            $foo 'test'
            ja die md5-Funktion umschreiben
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Also gross sind so ca. 100 - 500 kb. Eigentlich nicht so viel, aber das soll/muss mehrmals pro Sekunde passieren.

              Ich möchte versuchen die Performance zu erhöhen.

              @wahsaga
              Mann kann "return by reference" und "return by value" normalerweise bei Funktionen machen. Bei der Referenz wird nur ein Zeiger auf den Wert zurückgegeben was performanter ist.

              Eigentlich ist es kein Zeiger so wie bei C - aber die wo´s wissen, wissen was ich meine


              @mrhappiness
              Kapier ich nicht

              Kommentar


              • #8
                PHP-Code:
                class dummy {
                  var 
                $test;

                  function &
                get_test() {
                    return 
                $this->test;
                  }

                  function 
                echo_test() {
                    echo 
                $this->test;
                  }
                }

                var 
                $dummy = &new dummy();

                $x = &$dummy->get_test();

                $x 5;

                $dummy->echo_test(); 
                Das meine ich damit.

                Wenn md5 eine Referenz zurückgäbe und du würdest die Variable bearbeiten, die diese Refrenz enthält, würdest du ja direkt das bearbeiten, was md5 zurückgibt...

                btw #1:
                Mit Zeigern zu arbeiten muss - je nach Sprache - nicht zwangsläufig performanter sein als ohne Zeiger zu arbeiten.

                btw #2:
                Die in PHP schon vorhandenen Funktionen sind im Normalfall hinreichend schnell genug, da es sich dabei letztendlich um bereits zu 100% kompiliertes Zeug handelt (innerhalb dieser Funktionen wird eventuell auchm it Zeigern gearbeitet)
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Original geschrieben von phpaule
                  Mann kann "return by reference" und "return by value" normalerweise bei Funktionen machen. Bei der Referenz wird nur ein Zeiger auf den Wert zurückgegeben was performanter ist.
                  Aber nicht in PHP AFAIK.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Hmm, okay.

                    Ich danke euch für die Hilfe

                    Kommentar


                    • #11
                      Also gross sind so ca. 100 - 500 kb. Eigentlich nicht so viel, aber das soll/muss mehrmals pro Sekunde passieren.
                      dann schreib das ganze gleich in C als php-extension. wenn's richtig zeitkritisch wird, macht's mit php eh keinen spaß mehr.

                      grüße
                      axo

                      Kommentar


                      • #12
                        Hallo axo,

                        kennst du ein einfaches Hello World als Extention? So zum anschauen?

                        Kommentar


                        • #13
                          http://pecl.php.net/support.php#resources

                          Kommentar

                          Lädt...
                          X