echo $begrüßung;
[...] Singleton-Patterns*
function & singleton()
{
$inst_name = "_INSTANCE_" . strtoupper(__CLASS__);
if (isset($_SESSION))
{
if (!isset($_SESSION[$inst_name]))
$_SESSION[$inst_name] =& new Cart();
return $_SESSION[$inst_name];
}
else
{
if (!isset($GLOBALS[$inst_name]))
$GLOBALS[$inst_name] =& new Cart();
return $GLOBALS[$inst_name];
}
}
Das ist nicht wirklich hübsch, da man sowohl bei $_SESSION als auch bei $GLOBALS direkt auf die Instanz zugreifen kann. PHP4 kennt auch schon das Schlüsselwort static. Statische Variablen in einer Funktion sind nur innerhalb dieser verfügbar und behalten ihren Inhalt beim Verlassen der Funktion. Das wäre ein geeigneterer Ort, um die eine Instanz zu hinterlegen. Außerdem ist die Aufgabe und Arbeitsweise von $_SESSION und $GLOBALS doch eine andere. Mir wäre das suspekt, beide als quasi gleichwertig zu verwenden.
Und fuer PHP5
Das ist ein Repository. Dessen Aufgabe ist es, Instanzen an einem zentralen Punkt zu sammeln, damit diese nicht "in der Gegend rumliegen" oder ständig weitergereicht werden müssen.
Das Beispiel dort ist ein auf Singletons spezialisiertes Repository. Pro Klasse kann es nur eine Instanz aufnehmen.
Man kann ein Repository auch so schreiben, dass nicht der Klassenname sondern ein frei verwendbarer Bezeichner zum Zugriff auf die Instanzen genommen werden kann. Damit können dann auch mehrere Instanzen der gleichen Klasse darin abgelegt werden.
Im Prinzip benutzen beide Stellen ein array dafuer, nur mittels des nuen Schluesselwortes "static" kann man das auch tatsaechlich im Scope der Klasse halten.
Beide Codestellen kann man nur bedingt miteinander vergleichen. Dein PHP-4-Beispiel ist eine Methode aus einer Klasse. Das erzeugte Objekt wird nur an einer Stelle gespeichert, die zufälligerweise ein Element eines Arrays ist. Der Autor hat sicher nur keinen besseren Platz gefunden.
Warum das unter PHP5 noch ein array ist versteh ich eigentlich nicht; eigentlich soll ein Singleton ja grade "eins" und nicht "viele" sein...
Eine einfache Anwendung des Singleton-Musters findest du im PHP-Handbuch. Da ist die Speicherstelle kein Array.
echo "$verabschiedung $name";