Okay, jetzt wird ein bisschen an der Oberfläche gekratzt. Ich möchte einen Quasi-Standard vorstellen, der viele Möglichkeiten eröffnet und trotzdem oft links liegen gelassen wird: Das Objekt-Objekt, oder die Mutter aller Objekte :)
Wer schon mal Windowsprogrammierung mit der MFC oder STL betrieben hat, kennt das Objekt-Objekt. Genauso gut sind diejenigen dran, die schon mit guten PHP Frameworks gearbeiten haben: Alle Klassen sind von einer Stammklasse abgeleitet, die absolut wertfrei ist.
Vielleicht sieht das der eine oder andere als Designfehler an, denn Klassen sollten ihre Eigenschaften und Methoden eigentlich nur an gleichartige oder artverwandte Klassen weitergeben. Wieso dann eine Mutterklasse für alles?
Nun, der Einsatz auf den ich abziele, ist folgender: Nehmen wir mal an, es gibt eine Funktion, die in jeder Klasse dieselbe Funktion hat, immer gleich heisst und überall vorkommt. Gibts nicht? Na klar, gibts doch: Der Konstruktor von PHP 5: “__construct()”. Im direkt nachfolgenden Artikel demonstriere ich, wie man den PHP 5 Konstruktor in PHP 4 verwenden kann, aber dazu später mehr…
Eine andere Idee wäre, Zugriffe auf GPC-Variablen ($_GET, $_POST und $_COOKIE = GPC) und andere Datenquellen zu kapseln. Ist nichts neues, und es gibt verschiedene Möglichkeiten so etwas zu implementieren:
- Als globale Funktion
- Als Singleton-Objekt
- Als global verwendetes Objekt
- Als statische Funktion
- …
Ich bin mir sicher, der eine oder andere hat so was schon mal implementiert ;) Wie das Mutterobjekt letztendlich heisst, ist wurscht: Gängig ist die Bezeichnung “Objekt” oder “Object” - Bei der Bezeichnung kanns schnell krachen, wenn es bereits eine so benannte Klasse gibt. Aber bleiben wir mal bei der globalen Funktion: Die könnte man auch prima in der Mutterklasse unterbringen:
class Object
{
function GetParam($pname)
{
$use_post= isset($_POST[$pname]);
return $use_post ? $_POST[$pname] : $_GET[$pname];
}
}
Bitte probiert das nicht zu Hause: Diese Kurzfassung ist sehr fehleranfällig ;) Aber ich denke, man kann sehen, worauf ich hinaus will. Auf jeden Fall erbt jetzt jede abgeleitete Klasse die Funktion für das Auslesen von Parametern.
So, aber immer langsam mit den jungen Pferden: Das ist keine Einladung, das Mutterobjekt sinnlos voll zu müllen - es ist immer besser, sparsam mit Member-Funktionen in Objekten umzugehen. Lieber artverwandte Funktion in Objekte auslagern, als alles in ein und dieselbe Klasse zu packen.


















