Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Для профи > Для какого класса вызван static-метод? |
Автор: be_nt_all 27.3.2008, 11:45 | ||
По ходу написания микро-ORM для использования c http://madebyfrog.com возник один вопрос... Функции поиска для моделей в этом фреймворке реализуются как static-методы в которые передаётся имя класса. Однако, хотелось бы писать не AsRecord::Find('Agents',array(...параметры поиска...)), а Agents::Find(array(...параметры поиска...)), заодно оставив возможность переопределения метода Find для Agents. Массив с описаниями связей таблицы хранится в виде static свойства модели Пока сделал это с помощью грубой заглушки, определяю в каждом классе метод
однако в версии, которую я хотел бы показать сообществу желательно обойтись без такого "костыля". |
Автор: IZ@TOP 27.3.2008, 13:05 | ||
Могу предложить более красивый вариант:
Правда я не думаю, что подобная реализация идеологически правильна с точки зрения паттерна Factory. Но, по крайней мере, методы не дублируем. |
Автор: be_nt_all 27.3.2008, 14:23 | ||
К сожалению, не работает
в статическом методе возвращает именно self::$className (для класса, в к-м метод определён) - т.е. null. зы. или я не правильно понял строчку заменив !self::$factoryName на !self::$className |
Автор: be_nt_all 27.3.2008, 16:55 | ||||
Ну, я уже в этом убедился экспериментально ![]() ![]()
Хотелось бы немножко больше "синтаксического сахара", но, видимо, в PHP это невозможно... Спасибо за попытку помочь ![]() |
Автор: IZ@TOP 2.4.2008, 11:36 |
be_nt_all, совершенно случайно наткнулся на статейку по теме http://blog.felho.hu/what-is-new-in-php-53-part-2-late-static-binding.html. Может будет полезно. |