Werden PHP-Variablen als Wert oder als Referenz übergeben?
php
variables
pass-by-reference
pass-by-value
cmcculloh
quelle
quelle
Antworten:
Es ist nach Wert gemäß der PHP-Dokumentation .
quelle
$str = add_some_extra($str);
würde ich die Referenz nicht verwenden, oder? Was ist dann der wahre Mehrwert davon?$str
in Ihrem Fall null zugewiesen wird.In PHP werden Objekte standardmäßig als Referenzkopie an ein neues Objekt übergeben.
Siehe dieses Beispiel .............
Jetzt sehen Sie das ..............
Jetzt sehen Sie das ..............
Ich hoffe du kannst das verstehen.
quelle
$y
wird nicht benötigt - es gibt nichtsfunction changeValue
, was es erfordert, dass es sich im Inneren befindetclass Y
, so dass zwei nicht miteinander verbundene Konzepte miteinander verwickelt werden. Ich würdefunction changeValue
zum äußeren Bereich übersteigen$x = new X();
. Entfernen Sie alle Verweise auf$y
. Jetzt ist es einfacher zu sehen, dass die ersten beiden Beispiele $ x in Ruhe lassen und das dritte seinen Inhalt in ändertnew Y()
. Was leichter zu sehen wäre, wenn Sie dastype
von$x
- die Tatsache, dass beideX
undY
zufällig ein$abc
Feld enthalten, ist auch irrelevant für das, was demonstriert wirdEs scheint, dass viele Leute verwirrt sind, wie Objekte an Funktionen übergeben werden und was als Referenzmittel übergeben wird. Objektvariablen werden immer noch als Wert übergeben. Es ist nur der Wert, der in PHP5 übergeben wird, ein Referenzhandle. Als Beweis dafür:
Ausgänge:
Um als Referenz zu übergeben , können wir die Variablen ändern, die vom Aufrufer gesehen werden. Was der obige Code eindeutig nicht tut. Wir müssen die Swap-Funktion ändern in:
Ausgänge:
um als Referenz zu übergeben.
quelle
swap
Funktion übergeben würde. mit anderen Worten, wenn Objekte "als Wert übergeben" wurden. Andererseits ist es auch genau das, was Sie erwarten würden, wenn ein Objekthandle an die Funktion übergeben würde, was tatsächlich passiert. Ihr Code unterscheidet nicht zwischen diesen beiden Fällen.http://www.php.net/manual/en/migration5.oop.php
quelle
PHP-Variablen werden nach Wert zugewiesen, nach Wert an Funktionen übergeben und beim Enthalten / Darstellen von Objekten als Referenz übergeben. Mit einem & können Sie das Übergeben von Variablen als Referenz erzwingen
Zugewiesen nach Wert / Referenzbeispiel:
würde ausgeben
Übergeben von Wert / Referenz Exampe:
würde ausgeben:
Objektvariablen, die als Referenz übergeben werden exampe:
Würde ausgeben:
(Das letzte Beispiel könnte wahrscheinlich besser sein ...)
quelle
$foo
ist ein Zeiger auf ein Objekt .$foo
wird als Wert an die Funktion übergebenchangeFoo()
, dachangeFoo()
ihr Parameter nicht mit a deklariert wurde&
.Sie können eine Variable als Referenz an eine Funktion übergeben. Diese Funktion kann die ursprüngliche Variable ändern.
Sie können die Passage als Referenz in der Funktionsdefinition definieren:
quelle
Sie können es so oder so machen.
Wenn Sie ein '&' Symbol voranstellen, wird die Variable, die Sie übergeben, ein und dieselbe wie ihr Ursprung. dh: Sie können als Referenz übergeben, anstatt eine Kopie davon zu erstellen.
so
quelle
Variablen, die primitive Typen enthalten, werden in PHP5 als Wert übergeben. Variablen, die Objekte enthalten, werden als Referenz übergeben. Es gibt einen interessanten Artikel aus dem Linux Journal aus dem Jahr 2006, in dem dieser und andere OO-Unterschiede zwischen 4 und 5 erwähnt werden.
http://www.linuxjournal.com/article/9170
quelle
&
.Objekte werden in PHP 5 als Referenz und in PHP 4 als Wert übergeben. Variablen werden standardmäßig als Wert übergeben!
Lesen Sie hier: http://www.webeks.net/programming/php/ampersand-operator-used-for-assigning-reference.html
quelle
&
.&
vor den Parametern in der Definition definiert wurden. Wenn sie als Wert übergeben würden, würde das Objekt in dem Bereich, der die Funktion mit ihr als Parameter aufgerufen hat, dies tun nicht betroffen sein.Attribute können weiterhin geändert werden, wenn sie nicht als Referenz übergeben werden.
Ausgabe:
SwapObjects: b, a SwapValues: a, b
quelle
Für alle, die in Zukunft darauf stoßen, möchte ich dieses Juwel aus den PHP-Dokumenten teilen , die von einem anonymen Benutzer gepostet wurden :
Und hier ist das Beispiel, das sie liefern:
Ich habe einen ausführlichen Blog-Beitrag zu diesem Thema für JavaScript geschrieben , aber ich glaube, dass er für PHP, C ++ und jede andere Sprache gleichermaßen gut geeignet ist, in der die Leute verwirrt zu sein scheinen, ob es sich um eine Wertübergabe oder eine Referenzübergabe handelt.
Es ist klar, dass PHP wie C ++ eine Sprache ist, die die Referenzübergabe unterstützt. Standardmäßig werden Objekte als Wert übergeben. Wenn Sie mit Variablen arbeiten, in denen Objekte gespeichert sind, ist es hilfreich, diese Variablen als Zeiger zu betrachten (da dies auf Assemblyebene im Grunde genommen der Fall ist). Wenn Sie einen Zeiger als Wert übergeben, können Sie den Zeiger trotzdem "verfolgen" und die Eigenschaften des Objekts ändern, auf das verwiesen wird. Was Sie nicht tun können, ist, es auf ein anderes Objekt zeigen zu lassen. Nur wenn Sie einen Parameter explizit als Referenz übergeben deklarieren, können Sie dies tun.
quelle
Eigentlich sind beide Methoden gültig, aber es hängt von Ihren Anforderungen ab. Pass-Werte als Referenz machen Ihr Skript oft langsam. Es ist daher besser, Variablen nach Wert zu übergeben, indem der Ausführungszeitpunkt berücksichtigt wird. Außerdem ist der Codefluss konsistenter, wenn Sie Variablen nach Wert übergeben.
quelle
Verwenden Sie diese Option für Funktionen, wenn Sie die ursprüngliche Variable einfach ändern und sie wieder auf denselben Variablennamen mit dem neuen zugewiesenen Wert zurücksetzen möchten.
quelle
Abhängig von der Version ist 4 nach Wert, 5 nach Referenz.
quelle