2 votes

L'appel de la fonction parent par php empêche le parent de charger ses propres variables.

J'ai une classe Handler qui ressemble à ceci :

class Handler{
    public $group;

    public function __construct(){
        $this->group = $this->database->mysql_fetch_data("blabla query");
        //if i print_r($this->group) here it gives proper result

        new ChildClass();
    }

    public function userGroup(){
        print_r($this->group); //this is empty
                    return $this->group;
    }
}

class ChildClass extends Handler{

    public function __construct(){
        $this->userGroup();
        //i tried this too
        parent::userGroup();
        //userGroup from parent always returns empty
    }

}

Flux de travail :

  • Le gestionnaire est appelé à partir de mon index.php et la __construction est appelée

  • Le gestionnaire doit créer $group

  • Le gestionnaire crée une classe enfant

  • La classe enfant appelle la fonction Handler

  • Lorsque j'essaie de retourner $group dans la fonction, il tente de récupérer $this->group à partir de Child au lieu de Handler.

Lorsque j'essaie de demander quelque chose au parent, je ne peux accéder qu'à la fonction parent, puis à l'intérieur de la fonction, la classe parent ne trouve aucune de ses propres variables.

EDIT :

Je pensais que l'utilisation de 'extends' serait utile pour appeler les fonctions parentales, mais il semble que le passage de $this à l'enfant soit plus simple.

2voto

dqhendricks Points 11630

Vous n'avez jamais appelé le constructeur parent, donc l'objet groupe n'est jamais initialisé. Vous voudrez faire quelque chose comme ceci.

class Handler{
    public $group;

    public function __construct(){
        $this->group = $this->database->mysql_fetch_data("blabla query");
        //if i print_r($this->group) here it gives proper result

        new ChildClass();
    }

    public function userGroup(){
        print_r($this->group); //this is empty
                    return $this->group;
    }
}

class ChildClass extends Handler{

    public function __construct(){
        parent::__construct();
        $this->userGroup();
    }

}

Si vous aviez pas écrasé la méthode __construct dans votre classe étendue, alors la __construct du parent aurait été automatiquement appelée, mais puisque vous l'avez écrasée dans la classe étendue, vous devez lui dire d'appeler la __construct du parent dans la __construct de votre classe étendue.

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