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