Ein vielversprechendes Standardmuster ist das Singleton Design Pattern. Es sorgt dafür, das in einer Applikation oder einem Framework immer nur ein und dieselbe Objektinstanz verwendet wird - das aber, so oft man möchte. Eine klassische Verwendung wäre etwa eine Datenbankverbindung. Es wird immer nur eine gleichzeitig benötigt, aber an mehreren Stellen.
Ein Vorteil, der sich auf den 1. Blick ergibt, ist die Performance: Das Objekt muss nur einmal initialisiert werden - eventuelle Datenbankverbindungen werden nur einmal zu Beginn aufgebaut. Auch eine unter Umständen aufwändige Parametrisierung muss nur einmal durchgeführt werden. Und zu guterletzt wird der RAM nicht mit redundaten Infos zugemüllt - was will man mehr als eine schlanke, effiziente Anwendung!?
Um ein stinknormales Objekt zu einem Singleton-Objekt zu machen, ist nur eine einzige Funktion notwendig: “GetInstance”. Wie sie heisst, ist eigentlich egal - als Quasistandard hat sich aber “GetInstance” durchgesetzt. Beim 1. Aufruf erzeugt diese statische Funktion ein neues Objekt und liefert eine Referenz auf dieses zurück.
Werfen wir mal einen Blick auf die Implementierung:
class SingletonKlasse
{
function &GetInstance()
{
static $obj= null;
if(!is_object($obj))
$obj= new SingletonKlasse();
return $obj;
}
}
Das kaufmännische & bestimmt, das der Rückgabewert eine Referenz auf das erzeugte Objekt ist. Um eine Instanz des Objektes abzurufen, schlage ich folgendes vor:
$singletonObjekt=& SingletonKlasse::GetInstance();
Damit die Referenzzuweisung beibehalten wird ist es wichtig, das =& als Zuweisungsoperator zu verwenden. Klingt komisch und doppeltgemoppelt, aber da ist PHP 4 halt ein bisschen pinibel. Wenn mans weglässt, wird die Referenz in eine Objektkopie umgewandelt und ist nicht mehr mit dem Ursprungsobjekt gekoppelt.
Da die eigentliche Objektinstanz in einer statischen Funktionsvariable vorgehalten wird, wird bei jedem Abruf des Objektes eine Referenz auf das immerselbe Objekt zurückgeliefert.

















