php, вызывающий родительскую функцию, делает родителя неспособным загрузить собственные переменные - PullRequest
2 голосов
/ 26 марта 2012

У меня есть класс Handler, который выглядит следующим образом:

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
    }

}

Workflow:

  • Обработчик вызывается из моего index.php, а __construct называется

  • Обработчику необходимо создать $ group

  • Обработчик создает дочерний класс

  • Дочерний класс вызывает функцию-обработчик

  • Когда я пытаюсь вернуть $ group в функцию, он пытается получить $ this-> group от Child вместо Handler

Всякий раз, когда я пытаюсь что-то спросить у родителя, я могу получить доступ только к родительской функции, тогда внутри функции родительский класс не может найти ни одной из своих собственных переменных

EDIT:

Я подумал, что использование 'extends' будет полезно при вызове родительских функций, но кажется, что просто передать $ this потомку будет проще.

1 Ответ

2 голосов
/ 26 марта 2012

Вы никогда не вызывали родительский конструктор, поэтому объект группы никогда не инициализируется. Вы захотите сделать что-то вроде этого.

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();
    }

}

Если бы вы не перезаписали метод __construct в вашем расширенном классе, тогда родительский __construct был бы вызван автоматически, но, поскольку вы перезаписали его в расширенном классе, вы должны сказать ему вызвать родительский. __construct в вашем расширенном классе '__construct.

...