Objektzuweisung in PHP verstehen: Wert vs. Referenz
Wenn es um die Objektzuweisung in PHP geht, verstehen Sie den Unterschied zwischen Wert und Referenz Verhalten ist entscheidend. PHP kann Objekte entweder nach Wert oder nach Referenz zuweisen.
Originalcode-Snippet
Beachten Sie den folgenden PHP-Code:
<code class="php">class Foo { var $value; function foo($value) { $this->setValue($value); } function setValue($value) { $this->value = $value; } } class Bar { var $foos = array(); function Bar() { for ($x = 1; $x <= 10; $x++) { $this->foos[$x] = new Foo("Foo # $x"); } } function getFoo($index) { return $this->foos[$index]; } function test() { $testFoo = $this->getFoo(5); $testFoo->setValue("My value has now changed"); } }</code>
Frage: Zuweisungsverhalten
Wenn die Methode Bar::test() ausgeführt wird und den Wert von foo # 5 im Array der foo-Objekte ändert, wird das tatsächliche foo # 5 im Array beeinflusst , oder wird die Variable $testFoo nur eine lokale Variable sein, die am Ende der Funktion nicht mehr existiert?
Antwort: Zuweisung durch Referenz
Um das Verhalten zu bestimmen , analysieren wir den angegebenen Code:
<code class="php">$b = new Bar; echo $b->getFoo(5)->value; $b->test(); echo $b->getFoo(5)->value;</code>
Die Ausführung dieses Codes erzeugt die folgende Ausgabe:
Foo #5 My value has now changed
Erklärung
PHP weist Objekte zu Referenz standardmäßig in Version 5. Dies bedeutet, dass, wenn das foo # 5-Objekt von getFoo() zurückgegeben wird, eine Referenz auf dasselbe Objekt in der Variablen $testFoo gespeichert wird.
Folglich, wenn setValue() Wenn die Methode für $testFoo aufgerufen wird, wird das tatsächliche foo # 5-Objekt im Array geändert, nicht nur eine lokale Kopie. Aus diesem Grund ändert sich der Wert von foo # 5 auch nach der Ausführung der Methode Bar::test().
Hinweis zur Zuweisung nach Wert
Falls gewünscht, Sie können Objekte nach Wert statt nach Referenz zuweisen, indem Sie das Schlüsselwort clone verwenden:
<code class="php">$testFoo = clone $this->getFoo(5); $testFoo->setValue("My value has now changed");</code>
Das obige ist der detaillierte Inhalt vonWie wirkt sich das Zuweisungsverhalten auf Objekte in PHP aus: Wert vs. Referenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!