Mailinglisten-Archive |
Hallo Hannes,
Am Montag, 10. Juli 2006 19:35 schrieb Hannes H.:
> Guten Abend :-)
>
> Ausgangssituation: Ich habe eine Basis-Klasse, in der Datenbank-,
> Error- und Session-Handling implementiert sind, und von dieser werden
> diverse andere Klassen abgeleitet. Abstrakt beschrieben, sieht das so
> aus:
>
> abstract class A {
> protected __construct() {
> /* Datenbank-, Error-, Sessionhandling */
> }
> }
>
> class B extends A {
> protected __construct() {
> parent::__construct();
> }
> }
>
> class C extends A {
> protected __constrcut() {
> parent::__construct();
> }
> }
>
> Folgendes Problem stellt sich: Mit einer einzigen Ausnahme (nämlich
> bei Instatnzen der Klasse C) soll der Konstruktor der Basisklasse
> komplett abgearbeitet werden. Bei Instanzen der Klasse C sollen Teile
> nicht ausgeführt werden, aber der Rest vom Konstruktor schon. Bietet
> PHP5 eine Möglichkeit, in parent::__construct() zu ermitteln, welche
> abgeleitete Klasse intanziert wurde? Soweit ich das sehe, ist die
> einzige Möglichkeit, dem Konstruktor einen Parameter mitzugeben, der
> dann in der Basisklasse ausgewertet wird - aber irgend wie macht das
> auf mich keinen all zu sauberen Eindruck.
>
> Irgend welche Ideen, liebe Liste?
Du könntest hingehen und den Code im Konstruktor der Klasse A in zwei
Teile aufteilen, nämlich den Teil, der in jeder Klasse ausgeführt
werden soll, und den Teil, der in Klasse C nicht ausgeführt werden
soll. Beide Teile lagerst Du jeweils in eine eigene protected-Funktion
aus.
Dann schreibst Du in jeder Klasse einen eigenen Konstruktor, der
entweder beide oder nur eine der beiden Funktionen aufruft.
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive