PS
Des Weiteren
function param($name = ''){ if(! isset($this->CGI) ){ require "CGI.php"; $this->CGI = new CGI(); } return $this->CGI->param($name); }
auch ein typisches Beispiel für eine spätere Aggregation/late Delegation. Das CGI-Objekt wird erst eingebunden wenn die Methode
param()
aufgerufen wird. In Fakt beim ersten Aufruf dieser Funktion.
Eine solche Vorgehensweise wird auch Lazy Delegation genannt. Lazy weil die Aggregation (Instanz einer fremden Klasse als Eigenschaft der eigenen Klasseninstanz einbinden) später erfolgt also nicht als Injektion über den Konstruktor. Delegation weil die Methode der CGI-Instanz delegiert und damit zu einer eigenen Methode gemacht wird. D.h., die param()-Funktion die eine Methode der CGI-Instanz ist, wird so aufgerufen als wäre sie eine eigene Funktion.
Natürlich könnte man genau das auch per Vererbung erreichen, da erbt man jedoch sämtliche Methoden der Basisklasse.
Und natürlich kann man Lazy Delegation auch über Traits abwickeln. Man borgt sich sozusagen Methoden fremder Klassen (fremd heißt hier NICHT verwandt) und erstellt hierzu auch die entsprechenden Instanzen. Wie die Datenstrukturen im Inneren dieser Instanzen aussehen ist uninteressant, dafür gibt es eine API die man nutzt.
MFG