Вопрос о наследовании PHP - PullRequest
1 голос
/ 24 августа 2010

Если у меня есть следующий класс:

class foo {
    function __construct() {
        // Some code
    }
}

А затем использовать наследование для создания:

class bar extends foo {
    // Some code
}

Когда я создаю экземпляр класса 'bar', он автоматически выполнит метод __constructиз 'foo' или мне нужно сделать что-то еще, чтобы заставить этот метод выполняться?

Ответы [ 4 ]

5 голосов
/ 24 августа 2010

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

Примечание. Родительские конструкторы не вызываются неявно, если дочерний класс определяет конструктор.

Пока документацияне указывает это явно, обратное этому предложению также верно, то есть родительские конструкторы вызываются неявно, если дочерний класс не определяет конструктор.Поэтому в вашем примере создание экземпляра bar вызовет foo::__construct автоматически.

2 голосов
/ 24 августа 2010

работает, конструктор из родительского класса будет наследоваться.если вы определите новый конструктор в инсталлированном классе, он переопределит функцию конструктора родительского класса.если вы все еще хотите выполнить родительский конструктор, вы должны включить

parent::__construct(); 

в конструктор класса isntanciated

1 голос
/ 24 августа 2010

__construct перенесет, да.

Проблема возникает, когда вы хотите добавить что-то к этой функции, когда класс parent пригодится.

class bar extends foo {
    $this->doSomethingElse();
    parent::__construct();
}
0 голосов
/ 24 августа 2010

Конечно, когда вы расширяете класс, подкласс наследует все открытые и защищенные методы от родительского класса.

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