echo $begrüßung;
Welche ist da zu bevorzugen? Ich denke mal die 1. oder?
Das kommt drauf an.
Die Syntax $obj =& new Foo; erzeugt eine Instanz der Klasse Foo, wobei eine Referenz auf das erzeugte Objekt in $obj abgelegt wird.
Die Syntax $obj = new Foo; erzeugt eine Instanz der Klasse Foo, wobei eine eine Kopie des erzeugten Objekts in $obj abgelegt wird. Die ursprünglich erzeugte Instanz ist damit nicht mehr erreichbar.
In "08/15-Scripts" spielt der Unterschied sicher keine Rolle.
Oder hat das irgendwelche Nachteile?
Du musst dir im Klaren sein, wann eine Kopie von Nachteil ist.
Beispiel:
class Foo {
var $foovar;
// constructor
function Foo(&$bar) {
$bar->something($this);
}
}
class Bar {
var $foo;
function something(&$foo) {
$this->foo =& $foo;
}
}
$bar = new Bar();
$foo = new Foo($bar); // *1
$foo->foovar = 42;
echo $bar->foo;
Im Konstruktor von Foo wird eine Referenz auf die neu entstehende Foo-Instanz an eine Methode des per Referenz übergebenen Objekts $bar übergeben. in Bar::something() wird die übergebene Referenz in einer Eigenschaft festgehalten.
Von der neuen Foo-Instanz wird aber nur eine Kopie in $foo gespeichert. Eine Änderung von $foo->foovar beeinflusst $bar->foo nicht.
Ändert man die Zeile *1 zu $foo =& new Foo($bar); wird in $foo eine Referenz zu der Instanz abgelegt, die, durch dem Code im Konstruktor, auch in $bar bekannt ist. Änderungen in $foo sind damit auch in $bar->foo sichtbar.
Damit dürften alle Klarheiten beseitigt sein. :-)
Ab PHP5 gibt es diese Problematik so nicht mehr, da immer Referenzen übergeben werden und für eine Kopie explizit clone angegeben werden muss.
echo "$verabschiedung $name";