Betrachten Sie die folgende SituationParameterized Constructor Cascading
class URISplit {
var $REQ_URI;
//some more variables
function __construct($uri) {
//some code
$this->REQ_URI = $uri;
//some code yet again
}
}
und die folgende
class URIResolve extends URISplit {
//some variables
function __construct($uri) {
//some code
}
}
und andere
class PageControl extends URIResolve {
//some variables
function __construct($uri) {
//some more code
}
}
und jetzt die folgende Aussage
$page = new PageControl($_SERVER['REQUEST_URI']);
wird diese Aussage die korrekte Konstruktion aller Klassen sicherstellen.
Mit anderen Worten, Konstruktoren von class URISplit
und class URIResolve
verwenden die Zeichenfolge, die an class PageControl
's-Konstruktor geliefert wird, und führen die richtige Konstruktion aus.
Mein Ziel ist es, nur ein Objekt class PageControl
zu erstellen und zu entspannen und zu sehen, es die Arbeit zu tun. Arbeit bedeutet ->
- Spaltung der URI (done von
class URISplit
) - Lösung es (wo die Daten zu holen, was das heißt, ob seine eine Stelle gefragt wird, Seite, Nachrichten, oder irgendetwas anderes) (done durch
class URIResolve
) - Laden entsprechende Header, Seiten und andere Seite Komponenten (von Funktionen erfolgt in
class PageControl
Puh! Lange Frage!
aber den Parameter ($ uri), die durch benötigt wird Alle drei Klassen im Code meiner Frage werden dem Basisklassenkonstruktor übergeben. wird dies direkt in childest Klassenkonstruktor – OrangeRind
sein, oh richtig! Also kaskadieren die Konstruktoren nicht wie in Java/C++ oder ist der Artikel auf Ihrer Verbindung nur für Fälle, in denen parametrisierte Konstruktoren beteiligt sind? Das bedeutet, dass zuerst die Standardkonstruktoren geladen werden und dann, wenn die Steuerung zur übergeordneten Klasse zurückkehrt, wir den parametrisierten Konstruktor der Kindklasse explizit aufrufen? – OrangeRind
Das stimmt. Der Link in middus 'Antwort (zu den autorisierenden PHP-Dokumenten - schaut mal rein!) Zeigt auch diesen Kommentar: "Hinweis: Elternkonstruktoren werden nicht implizit aufgerufen, wenn die Kindklasse einen Konstruktor definiert. Um einen Elternkonstruktor auszuführen, a Aufruf an Parent :: __ construct() innerhalb des Child-Konstruktors ist erforderlich " – xtofl