![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
MyDarkSide |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
awdev,
если в базовом классе сделать debug_backtrace() то про класс-потомок там нет ни слова, даже если вызов метода идет из класса потомка. |
|||
|
||||
awdev |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
Ну так и я про что
|
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Тему не читал, но почти наверняка подойдет фабрика )
Судя по другим прочитанным темам с таким вопросом. |
|||
|
||||
MyDarkSide |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
nerezus, сейчас именно так и сделал. завтра UML прикреплю, а в коде так:
есть два класса User extends AbstractModel и UserCollection extends AbstractCollection (здесь и далее User для примера) есть функция-фабрика Collection($name) которая производит коллекции. А коллекции в результате поиска возвращают один или массив объектов User.
|
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Как сказал один уважаемый человек, static и наследование не совместимы.
И при программировании стоит это помнить. Я не знал это и потратил 2 дня на казалось бы "мегакрутую" архитектуру. Переделал за полчаса потом за действительно норальную, т.к. не мог исправить многие косяки без кучи костылей. |
|||
|
||||
MyDarkSide |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
nerezus, именно ! та же х...я самое главное перечитал кучу манов и букварей, и нигде даже намека не было на такую "особенность" статики
|
|||
|
||||
NewDima |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
MyDarkSide, блин, да это логично вытекает из самой природы статичных методов.
А по поводу фабрики, так мой код - тоже фабрика, если не заметили. Какая разница,
или
Кто скажет? Только не нужно говорить о непроизводительности магических методов и прочей чепухе. А, ну да, мы же пишем ниже 5.3.2, это главная причина |
||||
|
|||||
MyDarkSide |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
Вот когда разобъешь об это лоб - то да подумав, впринципе логично, но не мешало бы и хоть словом обмолвиться, про менее важные вещт трубят и разжёвывают, а тут какое то белое пятно, у того же Котерова про 5PHP половина книги посвящена XML, а тут хоть бы строчку... разница есть, в каждом классе модели могут быть определены свои специфические методы выборки, например для выборки сегодняшних именниников, в моем коде вызов останется прозрачным
в твоем коде
|
||||||
|
|||||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Так многие авторы делают, тот же Шилдт. |
|||
|
||||
NewDima |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Интересно, что возвращает метод getTodayIsBirthday? булево значение (судя по названию)? Что за пример ты привел? Бред какой-то Мой код будет примерно таким:
Еще раз говорю, всмотрись внимательно, между этим
и этим
разница минимальна, можно сказать, что только в записи. Первый способ: Collection('User') возвращает объект типа User, метод getById вызывается в контексте его же. Второй способ: Все намного прозрачнее |
||||||||||
|
|||||||||||
MyDarkSide |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
прежде чем хамить надо внимательно прочитать пост: во-вторых это тема НЕ про названия методов, каждый волен называть как ему нравится.
т.е. у тебя метод getUserByBirthday() - будет определен в классе Collection ? и ещё 100 других методов типа: выбрать не прочтенные комментарии, посты за сегодня, не прочтенные ПМ, кто пинал мою карму и т.д. ? как-то не очень.. |
||||
|
|||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
явное непонимание азов... читать азы здесь. Если ты бы хоть взглянул на код, который я дал, то не ответил так, как ты это сделал. Присмотрись внимательней, можешь открыть экранную клавиатуру, если тебе без нее проблема прочитать код. В общем сделай что-нибудь, прежде чем говорить про код, который ты не прочитал. В нем даже НЕТ метода getUserById, представляешь? а он будет вызываться, вот так чудо! |
|||
|
||||
MyDarkSide |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
судя по твоему коду азам могут поучить тебя даже первокурсники. Аргументирую, твой код:
1. Регулярка в методе, которая определяет какой метод "перевызвать", необходимость её применения надо обосновать. 2. Вы Очень не внимательно читаете топик-старты: 2.1 Речь идет о PHP5, но более ранем чем 5.3, соответственно функции там __callStatic() - там нет, иначе бы и мой код можно было заставить работать более прозрачным способом. 2.2 Речь идет о нормальном механизме наследования, в твоем коде, вы решаете совсем другую задачу,а именно сделать так, чтобы вызов метода типа МодельByПоле - выбирало запись из таблицы по определенному полю и всё. А что вы будете делать если надо будет добавить пагинаторы сюда, сортировки, выборки из 2 или более связанных таблиц - лепить новые регулярки ? а если выборка вообще не с полем связана а например, нужно получить время последней модификации таблицы модели, как выкручиваться будете ? наверно опять регуляркой. 3. Как работает нормальное наследование: есть базовый класс, часто объявленный как абстрактный, содержащий общее поведение для объектов своего класса, и есть его потомки, конкретизирующие поведение для своего подкласса, создается экземпляр потомка и вызов происходит методов потомка, который имеет доступ к общим методом объявленным в базовом классе, ты предлагаешь вызывать метод базового класса, который делегирует его своему потомку - наследование здесь вообще не при чем, в классе userModel можно вообще убрать "extends abstractModel". это по вашему "прозрачном" коду. Посмотрел ваш профиль
"Вэбкод" - это не увлечение (для меня по-крайней мере), это ежедневная работа по 8 часов, в т.ч. и с заказчиками которые хотят получить, то что они хотят, а не ссылки на умные статьи. Если вы где-то работаете, я бы на месте начальства по внимательнее пригляделся к вам, если не работаете - не надо строить из себя супер-гуру, которым вы не являетесь, хамом - да, гуру - нет, это разные вещи. |
||||
|
|||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
Безотносительно ко всему обсуждавшемуся в топике, а почему именно метод должен быть статическим?
И работает такое даже в PHP<5.3
|
|||
|
||||
NewDima |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Ну это уже твое восприятие кода, я тебе говорил только про саму идею. Реализовывай как хочешь. Добавлено через 3 минуты и 31 секунду
А ты не смотрел, когда я поставил такой текст? Время идет. И у меня тоже есть заказчики, которые довольны результатами моей работы. И я работаю на СЕБЯ. Больше не переходи на личности Добавлено через 4 минуты и 26 секунд О, кстати, я действительно хам, можешь отметить это в карме |
||||
|
|||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |