#php #class #oop #inheritance #extends
#php #класс #ооп #наследование #расширяет
Вопрос:
У меня проблема с классами и дочерними элементами.
Прямо сейчас у меня это так (мой основной класс) https://gist.github.com/anonymous/8fb344e9743284a5b12b
Обратите внимание на строку 37-41. Эти классы расширяют ядро. Теперь обратите внимание на 51-74.
Это работает безупречно, если я вызываю все, скажем, из index.php с помощью $core = new Core; $core-> db()-> query(«blablabla»), но это не работает, например, если я вызываю его из другого класса, который расширяет этоЯдро. $this->db()->query(«blablabla») просто не работает.
Что я делаю не так?
Комментарии:
1. Пожалуйста, укажите соответствующий код в самом вопросе. Вы не должны ссылаться на код, размещенный извне.
Ответ №1:
Если вы переопределяете конструктор в дочерних классах, вам нужно будет явно вызвать родительский конструктор из дочернего конструктора. В противном случае эти свойства никогда не будут инициализированы.
class Child {
public function __construct() {
parent::__construct();
}
}
Комментарии:
1. И что мне делать, если я хочу, чтобы эти классы были глобальными, без повторной инициализации их из дочернего элемента?
2. Свойства экземпляра уникальны для каждого экземпляра. Если вы хотите, например, чтобы каждое
db
свойство ссылалось на одну и ту же базу данных, тогда вам понадобится уровень внедрения зависимостей или настройка создания factory / singleton.