![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
be_nt_all |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.2.2007 Где: Ростов-на-Дону Репутация: нет Всего: нет |
По ходу написания микро-ORM для использования c FrogCMS Framework возник один вопрос... Функции поиска для моделей в этом фреймворке реализуются как static-методы в которые передаётся имя класса. Однако, хотелось бы писать не AsRecord::Find('Agents',array(...параметры поиска...)), а Agents::Find(array(...параметры поиска...)), заодно оставив возможность переопределения метода Find для Agents. Массив с описаниями связей таблицы хранится в виде static свойства модели
Пока сделал это с помощью грубой заглушки, определяю в каждом классе метод
однако в версии, которую я хотел бы показать сообществу желательно обойтись без такого "костыля". |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Могу предложить более красивый вариант:
Правда я не думаю, что подобная реализация идеологически правильна с точки зрения паттерна Factory. Но, по крайней мере, методы не дублируем. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
be_nt_all |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.2.2007 Где: Ростов-на-Дону Репутация: нет Всего: нет |
К сожалению, не работает
в статическом методе возвращает именно self::$className (для класса, в к-м метод определён) - т.е. null. зы. или я не правильно понял строчку заменив !self::$factoryName на !self::$className Это сообщение отредактировал(а) be_nt_all - 27.3.2008, 15:44 |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Сорри, да, я опечатался. Нет factoryName, есть className. Ты его переопределяешь в классе потомке и используешь в factory методе унаследованном от родителя. Если ты его не определил, будет вызвано исключение. Гы. Большой и жирный кол мне. Так сделать не получится ибо статичные проперти и методы базового класса не видят наследников. На php.net где-то об этом сказано было. Добавлено @ 16:50 Кстати. На одном из проектов, на котором я работаю, переписывали одну компоненту, где использовалась абстрактная фабрика. Подобный вопрос тогда так же стоял, в итоге решили использовать Name::factory(Name[, args]). Это сообщение отредактировал(а) IZ@TOP - 27.3.2008, 16:52 -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
be_nt_all |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.2.2007 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Ну, я уже в этом убедился экспериментально ![]() ![]()
Хотелось бы немножко больше "синтаксического сахара", но, видимо, в PHP это невозможно... Спасибо за попытку помочь ![]() |
||||
|
|||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
be_nt_all, совершенно случайно наткнулся на статейку по теме http://blog.felho.hu/what-is-new-in-php-53...ic-binding.html. Может будет полезно.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |