Eigentlich ist dieser Code so geschrieben, dass er mit PHP 4 kompatibel ist. Das kaufmännische Und ist in PHP 5 nutzlos (wie Tim sagte - seit PHP 5 werden alle Objekte per Referenz übergeben).
Mit PHP 4 wurden alle Variablen als Wert übergeben. Wenn man sie per Referenz übergeben wollte, musste man eine Referenzzuweisung deklarieren:
$ref_on_my_object =& new MyObject();
Dieser Code wird auch mit der Standardkonfiguration von PHP 5 akzeptiert, aber es ist besser, die :
$ref_on_my_object = new MyObject(); // Reference assignment is implicit
Bei Ihrem zweiten Problem ist das Problem "fast" dasselbe... Weil PHP es erlaubt, Funktionsargumente (bzw. -typen) zu deklarieren, und man das nicht für Rückgabewerte tun kann. Eine akzeptierte, aber "nicht so gute" Praxis ist es, die Deklaration von Referenzen innerhalb der Funktionsdeklaration zu vermeiden:
function foo($my_arg) {
// Some processing
}
und mit einer Referenz anzurufen...
$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function
Die ideale Erklärung würde eher wie folgt lauten:
function foo( & $my_input_arg ) {
// Some processing
}
dann verliert der Aufruf das kaufmännische Und:
$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function