PHP 5 übergabe von Klasse-Objekt als parameter, ist es immer ein Zeiger oder eine Kopie oder ein Klon?
Ich habe eine Frage über die übergabe-Objekt als parameter. Wenn wir an eine variable, wird eine Kopie erstellt, jedoch sieht das Objekt ist immer ein Verweis Zeiger, ist das richtig? Ich habe getestet mit den folgenden Beispiel-code:
class Base
{
private $var;
function set ($var)
{
$this->var = $var;
}
function show ()
{
echo $this->var, '<br>';
}
}
class Car
{
private $obj;
function __construct($obj)
{
$this->obj = $obj;
}
function set ($var)
{
$this->obj->set($var);
}
function show()
{
$this->obj->show();
}
}
class Bus
{
private $obj;
function __construct($obj)
{
$this->obj = $obj;
}
function set ($var)
{
$this->obj->set($var);
}
function show()
{
$this->obj->show();
}
}
Und durch das ausführen von
$base = new Base();
$base->set('one');
$base->show(); //one
$bus = new Bus($base);
$bus->show(); //one
$car = new Car($base);
$car->set('two');
$car->show(); //two
$base->show(); //two
$bus->show(); //two
Dem display das Ergebnis ist:
one
one
two
two
two
So ändern Sie die Basisklasse die variable auch noch irgendwo, es war, als parameter übergeben, in einer Funktion oder einer anderen Klasse hat Auswirkungen auf alle von Ihnen, so bedeutet das, dass es immer nach einem gleichen Objekt wie ein Zeiger?
Danke.
- php.net/manual/en/language.oop5.references.php
- Objekte werden übergeben von Referenzen standardmäßig. Aber actully, php-Referenz ist nicht wirklich Referenz und jedes mal, wenn Sie ein Objekt übergeben php-proccesor neues Objekt anlegen, die identisch sind und wenn Sie sich ändern, es wird sich ändern die anderen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In PHP Bei der übergabe von Objekt als parameter übergeben, es ist die Kopie der Referenz. Also:
dieser Ausgabe wird
Ipsum
, aber wenn Sie vergeben anderen Objekt an, dass $a reference:Wird es ausgegeben wird
Lorem
- da $ob noch Punkte auf zuvor erstellte Objekt.Übrigens:
Wenn Sie die ändern-Funktion definition
function aa(&$o)
. Jetzt wird es ausgegeben wirdIpsum
wieder, denn $o ist eine Referenz auf $ü-Referenz 🙂Zusammenfassend:
In PHP standardmäßig Parameter als Wert übergeben werden - auch, wenn Sie Objekte! Aber! Im code
$ob = new StdClass;
,$ob
ist Referenz auf das Objekt. Also standardmäßig wird die pass-Kopie der Referenz. Sie werden auf die gleichen Objekte verweisen. Aber wenn Sie eine änderung übergeben variable ($o = new StdClass;
),$ob
noch Punkte auf das gleiche Objekt. Das ist, warum nach dieser änderung vorliegenden Beispiel wird die AusgabeLorem
.Können Sie übergeben Parameter durch Verweis mit kaufmännisches und-Zeichen (&), aber im Falle von Objekten ist es meist nutzlos.
aa
Funktion im code-snipped. Hinzugefügtaa($ob);
Linie 🙂