2015-11-10 3 views
1

Когда я использовать свойство родительского класса он возвращает NULL, я понятие не имею, почему это происходит, пример кода:Не удается получить доступ к свойствам родительского класса

class Foo 
{ 

    public $example_property; 

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

    public function get_data() { 
     return 22; // this is processed dynamically. 
    } 
} 

class Bar extends Foo 
{ 
    public function __construct(){} 

    public function Some_method() { 
     return $this->example_property; // Outputs NULL 
    } 
} 

На самом деле это происходит, когда я установить значение свойств с constructor, но если я установить значения статически (например: public $example_property = 22, он не вернется NULL больше

+1

Это работает для меня. Можете ли вы отредактировать сообщение с кодом, который вы используете, чтобы получить это свойство? – fpietka

+0

Я использовал ответ @u_mulder, и это сработало! – Amin

+1

Итак, у вас должен быть '__construct()' в вашем классе 'Bar', потому что в противном случае он наследуется. – fpietka

ответ

3

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

class Bar extends Foo 
{ 
    public function __construct() { 
     parent::__construct(); 
    } 


    public function Some_method() { 
     return $this->example_property; // Outputs NULL 
    } 
} 

Но присмотревшись - если вы не объявите конструктор Bar, то родительский должен быть выполнен. Может быть, вы не показываете нам полный код?

Итак, если у вас есть __construct в дочернем классе и вы хотите использовать родительский конструктор - вы должны называть его явно, как я уже сказал, parent::__construct();.

Если у вас нет метода __construct в дочернем классе, вызывается родительский.

+1

Это, к счастью, не нужно. – fpietka

+0

Ох спасибо @u_mulder, это действительно сработало! – Amin

+1

конструктор наследования расширенного класса. из вашего примера это должно было сработать сразу – fpietka

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