hi,
das ist die Erklärung "Delegation":
print $foo->XR->xr("Heute ist %tag\n", array('tag' => date('D'))); # Heute ist Tue
In der Praxis sollte jedoch nicht mit der Instanz auf ein Attribut direkt zugegriffen werden, sondern über einen Accessor. Der direkte Zugriff auf ein Attribut ist gemäß der AGB zu OOP jedoch in der Klasse selbst erlaubt (dafür gibt es Gründe aber auch Ausnahmen). Hier nun die komplette Delegierung einer Funktion xr();
// Fremde Klasse
XR
// mit einer begehrenswerten Methode
xr()
// Meine Klasse will die Methode der fremden Klasse nutzen über die
// eigene Instanz
class Foo{
public function __construct(){
// Mache eine Instanz der fremden Klasse zum eigenen Attribut
$this->XR = new XR;
}
// Mache die Methode der fremden Klasse zu einer
// eigenen Methode (gleichnamig)
public function xr($haystack = '', $stash = array()){
// verwende dieselben Argumente
// und das Objekt der fremden Klasse (hier im Attribut XR)
return $this->XR->xr($haystack, $stash);
}
}
date_default_timezone_set('Europe/Paris');
$foo = new Foo; // Instanz meiner Klasse
print $foo->xr("Heute ist %tag\n", array('tag' => date('D'))); # Heute ist Tue
Und ja, Ihr könnt das Alles noch viiiiiiiiiiel besser machen, ich plaudere hier nur aus meiner täglichen Praxis, wo es auch gar nicht mehr darauf ankommt, den Code der fremden Klasse zu kennen, es genügt, die Methode zu kennen und wissen, welche Parameter erforderlich sind.
Hotti
--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.