2013-06-16 4 views
0

Я написал этот маленький тестовый скрипт для объекта наследования PHP:Наследование объектов PHP: как получить доступ к родительским атрибутам?

<?php 

class A { 
    protected $attr; 

    public function __construct($attr) { 
     $this->$attr = $attr; 
    } 

    public function getAttr() { 
     return $this->attr; 
    } 
} 

class B extends A { 

} 

$b = new B(5); 
echo $b->getAttr(); 

Это ничего не отображает! Почему он не отображает 5? Разве класс B не должен быть похож на класс A?

ответ

2

Вы используете variable variable вместо доступа к переменной непосредственно

$this->$attr = $attr; 
     ^
     |----- Remove This 

С

$this->attr = $attr; 
+2

Wooow! Я был очень разочарован, но теперь я чувствую себя идиотом! Большое спасибо! – mimipc

+1

Оставьте систему, играйте в игры GOW - это приятно .. Вздремнуть, затем продолжить программирование ... Это исправление большинства подобных ошибок программирования – Baba

+1

Вздремнуть ответ, я думаю ... – mimipc

4

Погрешность здесь:

$this->$attr = $attr; 

вы назначаете здесь $this->{5} (значение $attr).

Пишите, чтобы обратиться к собственности:

$this->attr = $attr; 
//  ^------ please note the removed `$` sign 

Заметить, что происходит в таких случаях, попробуйте сбросить ваш объект: var_dump($b);

+0

Спасибо за ваш ответ. Я очень хорошо знаю об этом, но иногда вы просто не видите опечатку, даже после проверки 10 раз ... – mimipc

+2

Просто потому, что сон не ... ^^ – mimipc

Смежные вопросы