Das Verständnis, was eine Klasse und ein Objekt ist setzen wir mal voraus.
Die Klasse darf also ihre Konstanten, Eigenschaften/Attribute (Variablen), und Methoden (Funktionen) haben. Simpelstes Beispiel:
<?php class MySimpleClass { //Eigenschaften public $var = 'Mein Wert'; //Methode public function myMethod() { echo $this->var; } } ?>
$this: Pseudovariable, Referenz auf das aufrufende Objekt
Erzeugen wir nun eine Instanz (Objekt) einer Klasse:
<?php $instanz = new MySimpleClass(); //geht im Kontext einer Klasse (s.o.) auch mit new self oder new parent //natürlich auch mittels Variable $klasse = 'MySimpleClass'; $instanz = new $klasse(); ?>
Objektzuweisung und Referenzierung – der Unterschied:
<?php $instanz = new MySimpleClass(); $zuweisung = $instanz; $referenz &= $instanz; $instanz = null; var_dump($instanz); var_dump($referenz); var_dump($zuweisung); //Ausgabe wird sein: NULL NULL object(MySimpleClass)#1 (1) { ["var"]=> string(9) "Mein Wert" } ?>
Wenn man also eine bereits erzeugte Instanz ($instanz) einer Klasse einer neuen Variablen ($zuweisung) zuweist, wird die neue Variable auf die selbe Instanz zugreifen wie das Objekt ($instanz), welches zugewiesen wurde. Also bleibt hier $zuweisung unabhängig der Variablen $zuweisung ebstehen, die reine Referenz ($referenz) hingegen nicht.
Weitere Möglichkeit der Instanzierung seit PHP5.3:
<?php class MySimpleClass { static public function getNew() { return new static; } } $obj1 = new MySimpleClass(); $obj2 = new $obj1; var_dump($obj1 !== $obj2); //bool(true) $obj3 = SimpleClass::getNew(); var_dump($obj3 instanceof MySimpleClass); //bool(true)
Kommentare sind geschlossen, aber Trackbacks und Pingbacks sind möglich.