Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden PHP-Objekte Wert- oder Referenzzuweisungen?

Verwenden PHP-Objekte Wert- oder Referenzzuweisungen?

Susan Sarandon
Susan SarandonOriginal
2024-10-22 07:25:02828Durchsuche

Do PHP Objects Use Value or Reference Assignment?

Werden Objekte in PHP per Wert oder Referenz zugewiesen?

In PHP werden Objekte standardmäßig per Referenz zugewiesen. Das heißt, wenn einer Variablen eine Objektreferenz zugewiesen wird, zeigt sie direkt auf das Objekt im Speicher. Alle über die Variable am Objekt vorgenommenen Änderungen werden im Originalobjekt widergespiegelt.

Betrachten Sie das folgende Beispiel:

<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");
    }
}

$b = new Bar;
echo $b->getFoo(5)->value;
$b->test();
echo $b->getFoo(5)->value;</code>

Wenn die Methode Bar::test() ausgeführt wird, wird sie angezeigt Ändert den Wert des fünften Objekts im Array der Foo-Objekte. Diese Änderung spiegelt sich im ursprünglichen Objekt wider, wie in der Ausgabe zu sehen ist:

Foo #5
My value has now changed

Dieses Verhalten ist auf die Zuweisung der Objektreferenz zur Variablen $testFoo zurückzuführen. Die Variable zeigt direkt auf das Objekt, sodass alle über die Variable vorgenommenen Änderungen im Originalobjekt widergespiegelt werden.

Um ein Objekt nach Wert statt nach Referenz zuzuweisen, können Sie das Schlüsselwort clone verwenden:

<code class="php">$testFoo = clone $this->getFoo(5);</code>

Das obige ist der detaillierte Inhalt vonVerwenden PHP-Objekte Wert- oder Referenzzuweisungen?. 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