referenzieren bei objekten
nuji
- php
Hi,
könnt ihr mir erklären, wie das hier:http://de3.php.net/manual/de/language.references.whatdo.php
zu verstehen ist?
Wenn & eine Kopie erzeugt, braucht es doch mehr speicher oder?
Verstehe den kurzen text leider nicht.
mfg
echo $begrüßung;
Wenn & eine Kopie erzeugt, braucht es doch mehr speicher oder?
& erzeugt eine Referenz, keine Kopie. Das mit dem Speicherverbrauch ist unter PHP anders gelöst. Die Kopie wird nicht sofort erstellt. Es wird erst dann wirklich kopiert wenn die Inhalte der beiden Variablen auseinanderlaufen. Auf http://derickrethans.nl/php_references_article.php ist ein Artikel zu finden, der über die Interna beim Variablenhandling Aufschluss gibt.
Referenzen waren unter PHP4 teilweise technisch nötig. Wenn du sie nicht aus wichtigem Grund benötigst, solltest du sie nicht anlegen. Speicher sparen ist kein solcher Grund.
Unter PHP5 werden Objekte immer als Referenz behandelt. Die Stellen an denen eine Referenz notiert werden muss sind gegenüber PHP4 stark zurückgegangen.
echo "$verabschiedung $name";
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?
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";