Вопрос наследования PHP ООП.Не удается получить доступ к родительской переменной из дочернего класса - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть такой класс:

class A {

 public $var = "";

 function __construct() {

  $this->var = "value";

 }

}

И такой дочерний класс:

class B extends A {

 function __construct() {

  // Is this correct?
  parent::__construct();

 }

 function my_function() {

  // Or this?
  // $options is an instantiation of A.
  global $options;

  echo $this->var;

 }

}

Проблема, с которой я столкнулся, заключается в том, что при вызове метода my_function (), значение var было пустым.Прочитав некоторое время на php.net, я обнаружил, что когда у дочернего класса есть собственный конструктор, родительский конструктор переопределяется, поэтому моя переменная была пустой.Мой вопрос заключается в том, является ли способ, которым я вызываю parent :: __ construct (), правильным решением, или мне следует просто глобализировать экземпляр объекта, который я создал в своем скрипте?Я много читал в комментариях на PHP.net и в других местах и ​​не смог найти ничего краткого.

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

С parent::method() вы вызываете переопределенный метод (не только конструктор), поэтому ваше решение является правильным.В вашем случае вы можете полностью опустить конструктор и просто установить значение при объявлении свойства.

class A {
  public $var = "value";
}

Дополнительно: глобальные переменные во всех отношениях ужасныИспользуйте их только, если у вас есть действительно веских причин для этого и никогда, потому что это удобнее.

0 голосов
/ 05 апреля 2011

Следующая «реализация» ...

$instanceOfB = new B();
$instanceOfB->my_function();

приводит к "значению" ... как и ожидалось.

Как вы вызывали my_function ()?

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