Мне нужно иметь возможность использовать статическую переменную, установленную в классе, которая расширяет базовый класс... из базового класса.
Рассмотрим это:
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, поэтому мне нужно адаптировать мой script.
Есть ли какое-то довольно обходное решение для решения этой проблемы?
Ура!
Кристоффер
РЕДАКТИРОВАТЬ: Цель
Как отмечено ниже, это очень упрощенный пример того, что я пытаюсь выполнить. Если я предоставил вам два варианта, которые я использовал для решения моей проблемы (и сама проблема), у кого-то может быть другое решение, чем у меня...
Я создал базовую модель базы данных, которая содержит такие функции, как "find", "find_by" и "find_all" (все статические).
В PHP 5.3 существует функция под названием get_called_class()
, которую я использую в настоящее время для определения имени вызываемого класса, а затем используйте ее для сопоставления с соответствующей таблицей базы данных. Класс Ex User
указывает на users
.
get_called_class()
не существует в PHP 5.2.x, и реализованные вами реализации hack очень ненадежны. Затем я обратился к этому варианту использования статической переменной во всех классах моделей, которые содержат имя класса.