Доступ к родительским свойствам и переопределенным методам в PHP - PullRequest
6 голосов
/ 29 июня 2009

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

abstract class ParentObj {
    private $data;
    public function __construct(){
        $this->data = array(1,2,3);
        var_dump($this->data);

        $this->method();
    }
    public function method(){
        echo "ParentObj::method()";
    }
}
class ChildObj extends ParentObj {
    public function __construct(){
        parent::__construct();
        var_dump($this->data);
    }
    public function method(){
        echo "ChildObj::method()";
    }
}

Ожидаемый результат:

array(1,2,3)
ChildObj::method()
array(1,2,3)

Фактический объем производства:

array(1,2,3)
ParentObj::method()
NULL

Проблема в том, что дочерний объект не может получить доступ к свойству данных, а родительский объект отказывается вызывать переопределенный метод в дочернем объекте.

Я что-то не так делаю, или у кого-нибудь есть идеи?

РЕДАКТИРОВАНИЕ: Я должен уточнить, что я создаю экземпляр ChildObj как $child = new ChildObj()

Ответы [ 2 ]

10 голосов
/ 29 июня 2009

Вы объявили data как личное, поэтому ChildObj не сможет получить к нему доступ - вам нужно сделать его защищенным:

protected $data;

Мой PHP (5.2.8) печатает ChildObj::method() - у вас установлена ​​более старая версия?

0 голосов
/ 29 июня 2009

Хорошо, проблема была в том, что методы фактически были объявлены закрытыми, а не общедоступными, как в моем сообщении, поэтому у них был тот же симптом, что и у свойства $ data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...