Как я могу установить объект в родительском классе и использовать его в дочерних классах? - PullRequest
0 голосов
/ 14 мая 2011

Вот некоторый рабочий код:

class A {
    public $Foo;

    public function GetFoo() {
        $this->Foo = 'Bar';
    }
}

class B extends A {
    function __construct() {
        $this->GetFoo();
        echo $this->Foo;
    }
}

$b = new B(); // Outputs "Bar"

Можно ли как-нибудь сделать это "красивее" (т.е. без метода A :: GetFoo ())? Я бы подумал, что оборачивание популяции $ this-> Foo внутри конструкции A :: __ (() будет работать, но это не так.

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

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

Возможно, вы переопределяете конструктор родителя, не вызывая с B?

class A {

    protected $Foo = null;

    public function __construct() {
        $this->Foo = 'Bar';
    }

}

class B extends A {

    public function __construct() {
        parent::__construct();
        echo $this->Foo;
    }

}
1 голос
/ 14 мая 2011

Из руководства PHP :

"Свойства класса должны быть определены как публичные, частные или защищенные. Если объявлено с использованием var без явного ключевого слова видимости, свойство будетбыть определенным как public . "

Итак, ваш класс B может видеть $this->Foo.Вам не нужно сначала звонить GetFoo().Однако сначала вы должны вызвать родительский конструктор, если вам нужно сослаться на $this->Foo внутри вашего конструктора для класса B.

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