Mailinglisten-Archive |
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