Bestimmen der Objektzuweisung in PHP
In der PHP-Programmierung können Objekte entweder durch Wert oder Referenz zugewiesen werden. Diese Unterscheidung wirkt sich darauf aus, wie sich an einem Objekt vorgenommene Änderungen in anderen Teilen des Codes widerspiegeln.
Betrachten wir den folgenden 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>
Es stellt sich die Frage: Wenn der „Bar::test( )“-Methode ausgeführt wird, wirkt sich die Änderung von „foo # 5“ im Array der „Foo“-Objekte auf das eigentliche „foo # 5“-Objekt selbst aus oder wird eine separate lokale Variable „testFoo“ erstellt?
Antwort:
Um die Antwort zu ermitteln, können wir den Code ausführen und die Ausgabe beobachten:
<code class="php">$b = new Bar; echo $b->getFoo(5)->value; $b->test(); echo $b->getFoo(5)->value;</code>
Die Ausgabe für den obigen Code wird voraussichtlich wie folgt lauten:
Foo #5 My value has now changed
Dies zeigt an, dass sich die am „testFoo“-Objekt vorgenommene Änderung auf das tatsächliche „foo #5“-Objekt im Array auswirkt. Dieses Verhalten wird auf das Konzept der „Zuweisung per Referenz“ in PHP 5 zurückgeführt, das standardmäßig für Objekte gilt.
Auswirkungen:
Zuweisung per Referenz stellt sicher, dass nachfolgende Änderungen an einem Objekt werden im gesamten Code widergespiegelt. Wenn Sie jedoch eine unabhängige Kopie eines Objekts erstellen möchten, können Sie das Schlüsselwort „clone“ verwenden, um eine wertbasierte Zuweisung durchzuführen.
Das obige ist der detaillierte Inhalt vonBeeinflusst die Zuweisung per Referenz die Objektänderung in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!