dedlfix: referenzieren bei objekten

Beitrag lesen

echo $begrüßung;

Unter PHP5 werden Objekte immer als Referenz behandelt. Die Stellen an denen eine Referenz notiert werden muss sind gegenüber PHP4 stark zurückgegangen.
Welche stellen sind das z.B. kann mr keine vorstellen?

Wenn du weißt, dass eine Referenz ein Verweis auf das Original ist und eine normale Zuweisung eine Kopie erstellt, du dir aber sicher bist, im konkret vorliegenden Fall keine Kopie sondern das Original zu benötigen, dann weißt du, dass du eine Referenz verwenden musst.

Beispiel Singleton-Muster: Wann immer man von einem Ding genau eins braucht und keine weitere Instanz existieren darf, verwendet man das Singleton-Muster. Es sorgt dafür, dass immer genau diese Instanz verwendet wird. Da ist es natürlich ungünstig, wenn man da jedesmal den Anfordernden eine Kopie übergibt.

PHP4:

function &getInstance() {  
  static $instance = null;  
  if ($instance === null) {  
    // bei Erstaufruf eine Instanz erzeugen  
    $instance = new stdClass();  
    $instance->a = 42;  
  }  
  return $instance;  
}  
  
$x =& getInstance();  
printf("x->a: %s\n", $x->a); // 42  
$x->a = 23;  
  
$y =& getInstance();  
printf("y->a: %s\n", $y->a); // 23

PHP5:

function getInstance() {  
  static $instance = null;  
  if ($instance === null) {  
    // bei Erstaufruf eine Instanz erzeugen  
    $instance = new stdClass();  
    $instance->a = 42;  
  }  
  return $instance;  
}  
  
$x = getInstance();  
printf("x->a: %s\n", $x->a); // 42  
$x->a = 23;  
  
$y = getInstance();  
printf("y->a: %s\n", $y->a); // 23

Beide Versionen unterscheiden sich nur in der Verwendung des & bei der Funktionsdeklaration und bei den Aufrufen. $y->a enthält die 23, weil $x und $y auf die gleiche Instanz verweisen.

echo "$verabschiedung $name";