PHP < 5.3 и get_called_class(). В продолжение старого спора. Нужен концептуальный совет.

Теги:Linux, PHP
 
+
-
edit
 

KRoN73
Balancer

администратор
★★★★★
Linux
В продолжение старого спора о ненужности get_called_class() для статических методов.

Вот уткнулся в практическую задачу.

Есть понятие очереди запросов на изменение объектов. Есть базовый класс фреймворка bors_object_change_request. Есть его наследник в проекте - aviaport_object_change_request extends bors_object_change_request. Фактически наследник - это просто настроенный базовый класс, в котором прописано, какой БД и какой таблицей он должен пользоваться (в системе может быть более одного проекта, данные разных проектов должны взаимодействовать, но не конфликтовать).

Есть статический метод быстрого добавления запроса на изменение свойства объекта:
code text
  1. static function add($target, $property, $value, $user);

И вот тут наступает облом. Я не могу наследовать этот метод. Внутри происходит создание объекта = записи в БД, экземпляра нашего класса. Но какого? Пока нет get_called_class(), я могу создавать только записи для базового класса. Имя класса-наследника мне неизвестно.

Приходится лепить костыль. В базовом классе определять:
code text
  1. static function add($target, $property, $value, $user, $self_class_name);

В наследнике определять метод-заглушку:
code text
  1. 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
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru