Heim >Backend-Entwicklung >PHP-Tutorial >Wie geht PHP beim Ändern des Werts von Objektvariablen mit der Zuweisung von Referenz und Wert um?
Zuweisung in PHP: Übergabe als Wert oder Referenz
Objekte in PHP werden bei der Zuweisung anders gehandhabt als primitive Datentypen. Standardmäßig weist PHP Variablen per Referenz zu, was bedeutet, dass sich eine Änderung des Werts einer Objektvariablen auch auf das ursprüngliche Objekt auswirkt. Dieses Verhalten kann etwas verwirrend sein, insbesondere bei der Arbeit mit Arrays von Objekten.
Code-Erklärung
Beachten Sie den folgenden Codeausschnitt:
<code class="php">class Foo { // ... } class Bar { private array $foos; // ... public function getFoo(int $index): Foo { return $this->foos[$index]; } public function test(): void { $testFoo = $this->getFoo(5); $testFoo->setValue("My value has now changed"); } } $b = new Bar; echo $b->getFoo(5)->value; $b->test(); echo $b->getFoo(5)->value;</code>
Übergabe als Wert und als Referenz
Jetzt analysieren wir den Code und beantworten die Frage:
Wenn die Methode Bar::test() ausgeführt wird und sich ändert Ist der tatsächliche Wert von foo #5 im Array der foo-Objekte betroffen?
Wenn die getFoo-Methode das Foo-Objekt an Index 5 zurückgibt, gibt sie eine Kopie des Objekts zurück Standard, da PHP Variablen standardmäßig nach Wert für primitive Datentypen zuweist und für Referenzdatentypen kopiert. Daher wirken sich die am $testFoo-Objekt vorgenommenen Änderungen nicht auf das ursprüngliche Objekt im Array aus, bis es dem Array wieder zugewiesen wird.
Zuweisung per Referenz
Allerdings , ändert der Code im Test direkt das zurückgegebene Foo-Objekt. Wenn eine Zuweisung zu einem Objekt erfolgt, weist PHP per Referenz zu. Dies bedeutet, dass Änderungen, die am zugewiesenen Objekt vorgenommen werden, im Originalobjekt widergespiegelt werden. Infolgedessen wird nach dem Aufruf der setValue-Methode für $testFoo das ursprüngliche Foo-Objekt an Index 5 im $foos-Array aktualisiert.
Demonstration
Ausführen des Der Code erzeugt die folgende Ausgabe:
Foo #5 My value has now changed
Diese Ausgabe zeigt, dass sich das Zuweisungs-nach-Referenz-Verhalten auf das ursprüngliche Objekt im Array ausgewirkt hat.
Änderung des Zuweisungsverhaltens
Wenn Sie ein Objekt nach Wert (Erstellung einer Kopie) statt nach Referenz zuweisen möchten, können Sie das Schlüsselwort „clone“ verwenden, wie unten gezeigt:
<code class="php">$testFoo = clone $this->getFoo(5);</code>
Das obige ist der detaillierte Inhalt vonWie geht PHP beim Ändern des Werts von Objektvariablen mit der Zuweisung von Referenz und Wert um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!