наследование свойств в php - PullRequest
3 голосов
/ 21 января 2011

У меня есть суперкласс, который содержит свойства и методы для их установки

class Super{
    private $property;

    function __construct($set){
        $this->property = $set;
    }
}

тогда у меня есть подкласс, который должен использовать это свойство

class Sub extends Super{
    private $sub_property

    function __construct(){
        parent::__construct();
        $this->sub_property = $this->property;
    }
}

но я получаю сообщение об ошибке

Notice: Undefined property: Sub::$property in sub.php on line 7

где я иду не так?

Ответы [ 3 ]

8 голосов
/ 21 января 2011

Ошибка говорит о том, что он пытается найти локальную переменную с именем $ property, которая не существует.

Чтобы сослаться на $ property в контексте объекта, как вы и предполагали, вам нужно $this истрелка.

$this->sub_property = $this->property;

во-вторых, строка выше потерпит неудачу как есть, потому что $property равен private для класса Super.Сделайте вместо этого protected, чтобы он наследовался.

protected $property;

В-третьих, (спасибо Мерин, я пропустил это), Саб должен расширить Super.

class Sub extends Super
3 голосов
/ 21 января 2011

Вам нужно сделать ваш $ sub_property защищенным, а не приватным.

2 голосов
/ 21 января 2011

Вам также необходимо указать, что подкласс выходит за пределы суперкласса:

class Sub extends Super {
   // code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...