В продолжение старого спора о ненужности get_called_class() для статических методов.
Вот уткнулся в практическую задачу.
Есть понятие очереди запросов на изменение объектов. Есть базовый класс фреймворка
bors_object_change_request. Есть его наследник в проекте -
aviaport_object_change_request extends bors_object_change_request. Фактически наследник - это просто настроенный базовый класс, в котором прописано, какой БД и какой таблицей он должен пользоваться (в системе может быть более одного проекта, данные разных проектов должны взаимодействовать, но не конфликтовать).
Есть статический метод быстрого добавления запроса на изменение свойства объекта:
code text
static function add($target, $property, $value, $user);
И вот тут наступает облом. Я не могу наследовать этот метод. Внутри происходит создание объекта = записи в БД, экземпляра нашего класса. Но какого? Пока нет get_called_class(), я могу создавать только записи для базового класса. Имя класса-наследника мне неизвестно.
Приходится лепить костыль. В базовом классе определять:
code text
static function add($target, $property, $value, $user, $self_class_name);
В наследнике определять метод-заглушку:
code text
static function add($target, $property, $value, $user) { return parent::add($target, $property, $value, $user, 'aviaport_object_change_request'); }
В общем - костыль.
Есть мысли, как без него обойтись, кроме как ждать повсеместного перехода на PHP 5.3?
[/p][/p][/p][/p][/p][/p][/p][/p]
// Транслировано с http://www.linux.org.ru/forum/development/5315317