hi,
Overload reicht mir nicht. Ich will, dass eine Methode in einer Subklasse nicht einfach nur die gleichnamige Methode der Basisklasse überschreibt sondern die Methode der Basisklasse austauscht
Das bedeutet, die Basisklasse müsste etwas über ihre abgeleiteten Klassen wissen
Nein, absolut nicht.
und würde nach dem Entfernen dieser Klassen
Es werden weder Klassen hinzugefügt noch entfernt. In meinen MVC-Subklassen ist der Controller keine Klasse sondern eine Methode.
, so dass ein Interface weder die Methode der Basisklasse, noch die überladene Methode in der Subklasse aufruft
Wie meinst du das? Ein Interface wird implementiert - das tut aktiv doch gar nichts.
Ja, da hatte ich mich etwas unverständlich ausgedrückt. Mein Interface besteht aus mehreren Methoden, die in einer bestimmten Reihenfolge aufgerufen werden.
Das Interface ist so implementiert, dass u.a. die Methode control() aufgerufen wird.
Hat bspw. eine Subklasse die Methode control(), wird damit die control()-Methode der Basisklasse überschrieben. Hat die Subklasse diese Methode nicht, gibt es kein Overload.
Sinn und Zweck der Sache nun: Die Zuweisung der control()-Methode wird von außen konfigurierbar. Es ist mir nun möglich, Webressourcen, die allesamt eine gemeinsame View-Class nutzen, den Controller oder Gruppen von Controllern zuzuweisen. Das spart mir einen Haufen Code und ist auch schön überschaubar.
Nochemal das Beispiel: Debug auf Abruf
Der URL nutzt eine View-Class, die viele andere URLs auch benutzen. Diese View-Class hat keine control()-Method. Als Erweiterung soll o.g. URL nun die Fähigkeit bekommen, dass Parameter möglich sind, bspw. für Debug-Geschichten o.ä. Der Request verbleibt in der View-Class, hier drinnen sind alle Attribute für den URL/Response bekannt, das ist auch ein riesen Vorteil, denn es müssen keine Attribute als Parameter übergeben werden.
URL rezept_kalender.html hat als konfigurierbares Attribut: 'control' => '1' D.h., der Controller wird in einem bestimmten Pfad auf dem FS gefunden, das stellt mein Autoloader sicher. So wie ichs gebaut habe, liegt die Methode control() jedoch nicht im Namespace der Subklasse sondern im Namespace der Basisklasse. Ergo findet kein Overload statt, sondern die Methode der Basisklasse wird einfach nur ausgetauscht.
Hotti
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.