Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wirkt sich das Zuweisungsverhalten auf Objekte in PHP aus: Wert vs. Referenz?

Wie wirkt sich das Zuweisungsverhalten auf Objekte in PHP aus: Wert vs. Referenz?

Barbara Streisand
Barbara StreisandOriginal
2024-10-22 07:25:30553Durchsuche

How Does Assignment Behavior Affect Objects in PHP: Value vs. Reference?

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!

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