SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=250&group=44
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Objekte – Referenzen und Kopien


Das Sprachverhalten der Zend Engine sah es bisher vor, beim Anlegen oder bei der Übergabe von Objektinstanzen nicht das eigentliche Objekt zu übergeben, sondern lediglich eine Kopie davon, so wie man es von Variablen kennt. Dieses Verhalten wird als copy by value bezeichnet und sorgte oft für Verwirrung. Die eigentliche Problematik liegt darin, dass etwaige Änderungen der Eigenschaften des Objekts sich nicht auf das Objekt selbst auswirken würden, sondern auf die Kopie des Objekts. Um tatsächlich nur eine Referenz auf das Objekt anzuwenden, konnte man sich nur mit der expliziten Deklarierung des &new-Operators behelfen.

Die künftige Verhaltensweise und Umgangsweise von Objekten orientiert sich strikt an Hochsprachen wie Java. Dort wird eine Objektinstanz mit einem object handle referenziert (by reference) und dieses Handle bezieht sich in allen Aktionen auf das Ursprungsobjekt. Der große Vorteil dabei ist, dass PHP 5 dies implizit erledigt, was nicht nur eleganter und flexibler ist, sondern auch spürbar die Performance steigert. Der konsequente Wechsel zum object by reference-Paradigma bietet aber auch Vorteile beim Umgang in puncto Usability und Semantik, wodurch Features wie Destruktoren und Dereferenzierung profitieren.

<?php

class Fahrzeug
{
  function __construct($typ)
  {
    $this->name  = $typ;
  }
  function ProduziereFahrzeug($obj, $name)
  {
    $obj->name = $name;
  }
}

$mobil = new Fahrzeug("PKW");
$mobil->ProduziereFahrzeug($mobil, "LKW");
// Ausgabe – LKW
echo $mobil->name;

?>