la situation suivanteparamétrés Constructor Cascading
class URISplit {
var $REQ_URI;
//some more variables
function __construct($uri) {
//some code
$this->REQ_URI = $uri;
//some code yet again
}
}
et les suivantes
class URIResolve extends URISplit {
//some variables
function __construct($uri) {
//some code
}
}
et un autre
class PageControl extends URIResolve {
//some variables
function __construct($uri) {
//some more code
}
}
et maintenant la déclaration suivante
$page = new PageControl($_SERVER['REQUEST_URI']);
cette déclaration assurera-t-elle la bonne construction de toutes les classes. En d'autres termes, les constructeurs de class URISplit
et class URIResolve
utiliseront la chaîne fournie au constructeur de class PageControl
et feront la construction appropriée.
Mon objectif est simplement de créer un objet de class PageControl
et détendez-vous et voyez-le faire le travail. Travail signifie ->
- partage l'URI (fait par
class URISplit
) - résoudre (où chercher les données pour ce qui est demandé à savoir si son poste, la page, des nouvelles, ou toute autre chose) (fait par
class URIResolve
) - têtes chargement appropriées, pages, et d'autres éléments de la page (faites par des fonctions dans
class PageControl
Ouf! longue question!
mais le paramètre (uri $) qui est nécessaire par Tous les trois classess dans le code de ma question sont fournis au constructeur de la classe de base. sera-t-il directement disponible dans le constructeur de classe d'enfant – OrangeRind
oh right! alors les constructeurs ne sont-ils pas cascadés comme en Java/C++ ou est-ce que l'article sur votre lien ne concerne que les cas où des constructeurs paramétrés sont impliqués? Cela signifie d'abord que les constructeurs par défaut sont chargés, puis lorsque le contrôle revient à la classe parente, nous appelons explicitement le constructeur paramétré par la classe enfant. – OrangeRind
C'est vrai. Le lien dans la réponse de middus (aux docs PHP autoritaires - regardez!) Montre aussi ce commentaire: "Note: Les constructeurs parents ne sont pas appelés implicitement si la classe enfant définit un constructeur. call to parent :: __ construct() dans le constructeur enfant est requis " – xtofl