phpbar.de logo

Mailinglisten-Archive

[php] PHP5: Erkennen ob Klasse abgeleitet wurde

[php] PHP5: Erkennen ob Klasse abgeleitet wurde

Sebastian Mendel lists at sebastianmendel.de
Die Jul 11 11:59:26 CEST 2006


Hannes H. schrieb:
> 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?

is_a($this, C)
oder
$this instanceof C

habs noch nie probiert, m�sste doch aber eigentlich funktionieren.

Aber ich w�rde es so nicht machen! Weil es 'verkehrt' herum ist - die
abgeleiteten Klassen m�ssen entscheiden was passiert die von der
abgeleitet wurde.

Eigentlich d�rfte der Code der nur in B ausgef�hrt werden soll auch nur
in B stehen und nicht in A! In A darf nur das stehen was auch
tats�chlich ALLE abgeleiteten Klassen verwenden.

Wenn dein Problem ist das du mehrere Klassen von A ableitest als nur B
und C, und C die einzige ist die diesen Code nicht ausf�hren soll musst
du 'vor' A noch eine Klasse setzen die den gesamten Code enth�lt der in
B und C vorkommt und A davon ableitest und in A nur das erg�nzt was in B
vorkommt, und C von der neuen Klasse ableiten.



-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive