Мне нужно иметь возможность использовать набор статических переменных в классе, который расширяет базовый класс ... из базового класса.
Учтите это:
class Animal {
public static $color = 'black';
public static function get_color()
{
return self::$color;
}
}
class Dog extends Animal {
public static $color = 'brown';
}
echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'
Этопрекрасно работает в PHP 5.3.x (Dog::get_color()
печатает «коричневый»), поскольку имеет позднюю статическую привязку.Но мой рабочий сервер работает под управлением PHP 5.2.11, и поэтому мне нужно адаптировать свой скрипт.
Есть ли какой-нибудь довольно обходной путь для решения этой проблемы?
Cheers!
Christoffer
РЕДАКТИРОВАТЬ: цель
Как отмечено ниже, это очень упрощенный пример того, что я пытаюсь достичь.Если я предоставлю вам два варианта, которые я использовал для решения своей проблемы (и самой проблемы), у кого-то может быть другое решение, чем у меня ...
Я создал базовую модель базы данных, которая содержит такие функции, как "find "," find_by "и" find_all "(все статические).
В PHP 5.3 есть функция с именем get_called_class()
, которую я в настоящее время использую для определения имени вызываемого класса, а затем использую его для сопоставления справильная таблица базы данных.Класс ex User
будет указывать на users
.
get_called_class()
, которого нет в PHP 5.2.x, и найденные мной хакерские реализации очень ненадежны.Затем я обратился к этой опции использования статической переменной во всех классах моделей, которые содержат имя класса.