hkl: PHP4/5

Beitrag lesen

Hallo !

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.

Gute Idee !

Lokale statics verwende ich nicht gerne. Aber hier wuerd's wirklich passen, da der Status ja in der Funktion selber unabhaengig von externem Status verwaltet wird.

Ausserdem ist PHP ja wohl "threadsicher" ( weil's nur einen logischen Thread in einer Sitzung gibt ) oder wie siehst Du das ?

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.

GoF nennen das wohl Singleton-Registratur. Trotzdem halte ich nichts von der Delegation an eine andere Klasse zur Singleton-Erzeugung. Ausser wenn das fuer den Client transparent erfolgt - siehe mein Beitrag im andren Zweig dieses Threads.
Die statische Erzeugungsfunktion des Musters ist ja gerade als zentraler Zugriffspunkt entworfen.
Bei der Typunsicherheit von PHP finde ich konzeptionell sauberer, Typen dort zu nuzten wo's mal geht.
Fehler sind dann auch leichter zu finden.

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.

Da mag sein, aber das find ich semantisch sehr fragwuerdig. Selbstdokumentierend ist das das nicht.

»»PHP5

Danke fur den Link, hab btw. fuer Perl was Praktisches in der Richtung gefunden.
Perl Pattern

Gruss

Holger