Связывание классов PHP

#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.