Специфичные для дочернего класса статические переменные - PullRequest
0 голосов
/ 06 января 2019

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

У меня есть 3 класса: P, A и Q. Q - это базовый класс, который P и A расширяют.

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

Мой базовый класс сейчас такой:

class Q{

    public static $__initialized = FALSE;

    public static function initialize(){
        static::$__initialized = TRUE;
    }
}

Простые дочерние классы выглядят так:

// class A is identical
class P extends Q{
    public static function isInitialized(){
        echo (static::$__initialized) ? 'Initialized' : 'Not initialized';
    }
}

Это мой код тестирования:

P::initialize();
A::isInitialized();

Когда вызывается A::isInitialized(), он выводит «Initialized», даже если это не было.

Я использовал ключевое слово static в Q::initialize(), пытаясь связать его с поздним статическим связыванием, но я понимаю, что это не будет ссылаться на P::__initialized, поскольку __initialized является определенным в Q, поэтому static::__initialized будет ссылаться на свойство Q.

Есть ли способ выполнить то, что я хочу, без необходимости объявлять __initialized в P и A? Моя цель - иметь возможность написать класс, который расширяет Q и имеет множество функциональных возможностей, уже доступных (например, загрузку структуры таблицы), без необходимости выполнять какие-либо работы по созданию леса в расширяющем классе.

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