Heim >Backend-Entwicklung >PHP-Tutorial >Wie geht PHP beim Ändern des Werts von Objektvariablen mit der Zuweisung von Referenz und Wert um?

Wie geht PHP beim Ändern des Werts von Objektvariablen mit der Zuweisung von Referenz und Wert um?

DDD
DDDOriginal
2024-10-22 07:22:30441Durchsuche

When Changing the Value of Object Variables, How Does PHP Handle Assignment of Reference and Value?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn