0 votes

Constructeur paramétré Cascade

Considérons la situation suivante

class URISplit {

    var $REQ_URI;

    //some more variables

    function __construct($uri) {
        //some code
        $this->REQ_URI = $uri;
        //some code yet again
    }
}

et ce qui suit

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 la bonne construction de toutes les classes.

En d'autres termes, les constructeurs de class URISplit y class URIResolve utiliser la chaîne fournie à class PageControl et faire la construction appropriée.

Mon objectif est de créer simplement un objet de class PageControl et se détendre et le laisser faire le travail. Travailler signifie ->

  1. fractionnement de l'URI (effectué par class URISplit )
  2. la résolution (où aller chercher les données pour ce qui est demandé, c'est-à-dire s'il s'agit d'un article, d'une page, d'une nouvelle, ou de quoi que ce soit d'autre) (effectuée par class URIResolve )
  3. le chargement des en-têtes, des pages et des autres composants de la page (effectué par les fonctions de l'interface utilisateur). class PageControl

Ouf ! Longue question !

3voto

middus Points 7613

Je pense que vous devriez ajouter des appels au constructeur parent comme décrit dans http://php.net/manual/en/language.oop5.decon.php

class SubClass extends BaseClass {
  function __construct() {
    parent::__construct();
    print "In SubClass constructor\n";
  }
}

2voto

xtofl Points 22333

Vous devez appeler explicitement le constructeur du parent à partir de celui de l'enfant. Jetez un coup d'œil à ce site pour un exemple.

La raison en est que la classe enfant peut choisir de donner au constructeur parent des arguments différents.

Heck, il est même possible d'avoir une

class SOSplit extends URISplit {
    function __construct() { 
        parent::__construct( "http://stackoverflow.com" );
    }
}

class URIResolve extends URISplit {

    //some variables

    function __construct($uri) {
        parent::__construct( $uri);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X