Looking for php Keywords? Try Ask4Keywords

PHP Nach Referenz übergeben


Beispiel

Auf diese Weise können Sie eine Variable als Referenz an eine Funktion oder ein Element übergeben, mit der Sie die ursprüngliche Variable ändern können.

Die Weitergabe per Referenz ist nicht nur auf Variablen beschränkt, Folgendes kann auch als Referenz übergeben werden:

  • Neue Anweisungen, zB foo(new SomeClass)
  • Von Funktionen zurückgegebene Referenzen

Arrays

"Pass-by-Reference" wird häufig verwendet, um Anfangswerte innerhalb eines Arrays zu ändern, ohne neue Arrays zu erstellen oder den Namespace zu verschwenden. Das &$myElement als Referenz ist so einfach wie das Voranstellen / Voranstellen der Variablen mit einem & => &$myElement .

Nachfolgend finden Sie ein Beispiel für die Verwendung eines Elements aus einem Array und das Hinzufügen von 1 zu seinem Anfangswert.

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

Wenn Sie nun ein Element innerhalb von $arr , wird das ursprüngliche Element aktualisiert, wenn der Verweis erhöht wird. Sie können dies überprüfen durch:

print_r($arr);

Hinweis

Sie sollten beachten, wenn Sie innerhalb von Schleifen einen Referenzdurchlauf verwenden. Am Ende der obigen Schleife enthält $num immer noch einen Verweis auf das letzte Element des Arrays. Durch die Zuweisung der Nachschleife wird das letzte Array-Element bearbeitet. Sie können sicherstellen, dass dies nicht geschieht, indem Sie es nach der Schleife unset() :

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

Die oben genannten Punkte stellen sicher, dass Sie keine Probleme haben. Ein Beispiel für Probleme, die sich hieraus ergeben könnten, ist in dieser Frage zu StackOverflow enthalten .


Funktionen

Eine weitere übliche Verwendung für das Weiterleiten von Referenzen ist innerhalb von Funktionen. Das Ändern der ursprünglichen Variablen ist so einfach wie folgt:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

Was kann durch echo der Originalvariablen überprüft werden.

echo $var;

Es gibt verschiedene Einschränkungen für Funktionen, wie unten in den PHP-Dokumenten angegeben:

Hinweis: Bei einem Funktionsaufruf gibt es kein Referenzzeichen - nur bei Funktionsdefinitionen. Funktionsdefinitionen allein reichen aus, um das Argument korrekt als Referenz zu übergeben. Ab PHP 5.3.0 erhalten Sie eine Warnung, die besagt, dass "Call-Time Pass-by-Reference" veraltet ist, wenn Sie & in foo (& $ a); verwenden. Und seit PHP 5.4.0 wurde die Referenzübergabe für die Aufrufzeit entfernt, so dass die Verwendung dieser Option zu einem schwerwiegenden Fehler führt.