Übergabe von Objekten als Referenz in OOP in PHP
Nehmen wir an, wir haben die folgende Klasse User:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Nehmen wir an, wir erstellen ein Objekt dieser Klasse:
<?php
$user = new User('john', 30);
?>
Stellen Sie sich nun die folgende Situation vor: Sie
möchten den Wert der Variable $user
einer anderen Variable zuweisen, zum Beispiel
$test.
Wenn es nicht um Objekte, sondern um Primitive ginge,
also um Zeichenketten, Zahlen, Arrays usw.,
dann würde in die Variable $test eine Kopie
des Werts der Variable $user gelangen.
Das bedeutet, dass Änderungen an einer der Variablen in der Zukunft den Wert der anderen Variable nicht verändern würden. Sehen wir uns ein Beispiel an:
<?php
$user = 1;
$test = $user; // in der Variable $test ist jetzt 1
$test = 2; // in der Variable $test ist jetzt 2, und in $user - nach wie vor 1
?>
Bei Objekten ist es anders - bei Zuweisung an eine andere Variable werden Objekte nicht kopiert, sondern als Referenz übergeben: Das bedeutet, dass beide dieser Variablen als Wert ein und dasselbe Objekt haben. Dies hat eine wichtige Konsequenz: Wenn man einige Eigenschaften des Objekts mit Hilfe einer Variable ändert, werden in der zweiten Variable dieselben Änderungen erscheinen.
Lassen Sie uns das praktisch ausprobieren. Erstellen wir ein Objekt mit einem User:
<?php
$user = new User('john', 30);
?>
Weisen wir das Objekt einer anderen Variable zu:
<?php
$test = $user;
?>
Ändern wir die Eigenschaft name
in der Variable $test
<?php
$test->name = 'eric';
?>
Lassen Sie uns prüfen, ob sich das gemeinsame Objekt geändert hat.
Geben wir die Eigenschaft name
aus der Variable $user aus:
<?php
echo $user->name; // gibt 'eric' aus!
?>
Erstellen Sie eine Klasse Product, in der
es die folgenden Eigenschaften gibt: name,
price.
Erstellen Sie ein Objekt der Klasse Product, schreiben Sie
es in die Variable $product1.
Weisen Sie den Wert der Variable $product1
der Variable $product2 zu. Prüfen Sie,
dass beide Variablen auf ein und dasselbe Objekt verweisen.