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