:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte
Unternehmen im
Anbieterverzeichnis von SELFPHP
:: SELFPHP Forum ::
Fragen rund um die Themen PHP? In über
120.000 Beiträgen finden Sie sicher die passende
Antwort!
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
:: Qozido ::
Die Bilderverwaltung mit Logbuch für
Taucher und Schnorchler.
|
|
Dereferenzierung von Objekten |
Bei der Dereferenzierung von Objekten ist es grundsätzlich möglich, aus einer Funktion heraus ein Objekt zurückzugeben, welches ohne Instanz auskommt und trotzdem den Aufruf von Klassenmethoden des zurückgegebenen Objekts im globalen Namensraum erlaubt.
Funktionsweise der Dereferenzierung von Objekten
Um ein Objekt anzusprechen, welches die Instanz eines anderen Objekts ist, war bislang ein Zwischenschritt über eine temporäre Variable notwendig. Mit PHP 5 lässt sich der gesuchte Name mit einem einzigen Ausdruck und ohne Umwege ermitteln.
Beispiel
<?php
// Klassendefinition
class Person
{
var $Name;
var $Vater;
var $Mutter;
function __construct($wert){
$this->Name = $wert;
}
}
// Verwandtschaftliche Beziehungen definieren
$objOpa = new Person('Armin');
$objVater = new Person('Wendelinus');
$objVater->Vater = $objOpa;
$objMatze = new Person('Matze');
$objMatze->Vater = $objVater;
// Name von Matthias Opa – PHP 4-Variante
$objTemp1 = $objMatze->Vater;
$objTemp2 = $objTemp1->Vater;
echo "Matzes Opa heisst " . $objTemp2->Name;
// PHP 5 mit Objekt-Dereferenzierung
echo "Matzes Opa heisst " . $objMatze->Vater->Vater->Name;
?>
Diese Verknüpfungskette, an der man sich von einem Objekt zum nächsten entlangbewegt, mag unnötig aufgebläht erscheinen. Sie müssen sich dabei jedoch immer vor Augen halten, dass Sie somit auf temporäre Variablen verzichten können und dass bei vernünftiger Objektmodellierung der Code dabei auch die echten Beziehungen der Objekte untereinander ausdrückt. So kann der Ausdruck $objMatze->Vater->Vater->Name wie folgt übersetzt werden: »von Matzes Vater, der Vater, der Name«. Bei der auf PHP 4 basierenden Variante muss man schon genauer hinsehen, um die Beziehungen zu erkennen.
Das Prinzip funktioniert nicht nur mit Instanzvariablen, sondern auch mit Methoden – sofern diese Objektreferenzen als Rückgabewert liefern. Damit sind Konstrukte möglich wie:
objKleiderSammllung->getHochzeitsKleid()->strFarbe;
"Das Hochzeits Kleid hat die Farbe..."
Beispiel – Vertiefung Objekt-Dereferenzierung
<?php
class PKW
{
protected $name = "";
function __construct($typ)
{
$this->name = $typ;
}
function Bauen()
{
echo $this->name . " bauen\n";
}
}
class Motorrad
{
protected $name = "";
function __construct($typ)
{
$this->name = $typ;
}
function Bauen()
{
echo $this->name . " bauen\n";
}
}
function Produzieren($obj, $name)
{
switch ($obj)
{
case "PKW":
return new PKW($name);
case "Motorrad":
return new Motorrad($name);
}
return new PKW($name);
}
Produzieren("PKW", "Mini")->Bauen();
Produzieren("Motorrad", "Kawasaki")->Bauen();
?>
Ausgabe
Mini bauen
Kawasaki bauen
|
|
|
|
|
|