- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
ага... вы сделаете новое правило роутинга... а завтра прийдет другой разраб и захочет хукнуть тот же метод. И создаст еще один класс который наследует оригинальный, а потом перекинет правило роутинга на себя.
Никогда не понимал зачем загонять себя в рамки только для того чтобы "все было правильно". :)
Ок, ну пусть даже мы загоним себя в рамки столь простых проектов в которых плагины и виджеты так редки что если один плагин в проекте и будет, то это круто... и значит конфликтов никаких не будет в нескольких хуках одного и того же метода.
Опять таки изменение правил роутинга будет делаться в ЧУЖОМ коде :)
В результате гоняясь за более "правильным ООП" мы лишимся главного преимущества ООП - скрытия внутренней структуры.
mendel, ок, ладно оставляю вас вариться в собственном соку, но все же посоветовал бы вам глянять как реализованы современные фреймворки и на подходы в них, ибо у меня складывается впечатление, что вы пишете очередную дле :)
p.s. Я бы предложил позадавать вопросы на phpclub.ru - всё же там профессиональных php-программистов на единицу площади намного больше чем на сёрче.
mendel, если чесно ничего не понятно, абсолютно... какой конфиг? по крайней мере я вижу около 'ньюз' вызвать 'ньюз2лог'...
кстате, не для спора, хотите посмотреть одну реализацию которую я увидел пару месяцев назад на perl'овом фреймворке?
распределенное ООП какое-то своеобразное...
записать так:
все вызывается по очереди и можно прицепить к $c->stash (т.н. виртуальному методу)
и методы будут вызыватся так, друг за другом, как роли... красиво получается
в других языках, такого не видел... сделать наверное можно, но саму идею такую даже ни где не видел...
rtyug, в PHP5 это реально и активно используется в фреймворках в той или иной форме, вот как раз пишу проект на Yii, строчка оттуда:
Здесь модель Listen получает данные из таблицы по примари кей, и соединяёт параллельно данные из другой таблицы по relation 'listenname'.
Если мы хотим чтобы присоединение принудительно осуществлялось одним запросом, то меняем на такое
Надеюсь я правильно понял, что имелось в виду :)
ну я написал как раз что не для спора, а именно толкунуть идею ТС, чтобы его ядро получало url /blog/user/*/view/*/* ( /blog/user/1/view/22/333 ) и чтобы "толкало" ("диспатчиризировало", dispatch) между классо(а)м(и)
в данном случае класс blog и методы user и view (или алиасы) и количество параметров в них соответственно '1' '22' '333'...
с Yii я не знаком, знаком с ним со всем не много, я читал полностью всю документацию по Symfony и Zend, и смотрел написанные на нем сайты, только на 100% не приходилось с ними двумя работать, к сожалению, попадались уже готовые движки написанные кем-то на php...
вы написали про таблицы и primary key, но тут имелось ввиду url путь /blog/user/*/view/*/* (с mod_rewrite или на прямую с apache)
извините, если забыл написать что это именно url
mendel вы немного видать не понимаете саму суть механизма событий, на которую вам намекает Dreammaker, к примеру по поводу такого:
Tarry, хочет сделать, чтобы при добавлении комментариев со ссылками или от новых пользователей номера этих комментариев добавлялись в специальную таблицу для модерации...
в таком случае Dreammaker в своем блоге должен прописать какие могут быть события, в каких местах они вызываются ну и соответственно написать документацию :)
Tarry берет и читает документацию, и если документация хорошо написана не открывая кода начинает просто регистрировать обработчики для соответствующих событий. Обработчиком может быть функция, метод класса, либо с пхп 5.3+ - анонимная функция. При этом совсем не обязательно переопределять базовый класс.
тут по подробней про события и поведения в Yii
JTRTA, а чем это не хук? :)
Я ж изначально об этом и веду речь... а Dreammaker, уводит разговор в переопределение методов и т.п.
Суть вопроса то в чем - если мы обрабатываем хуки/события например так то к чему привязывать событие/хук в случае объекта?
Это может быть как метод класса так и метод экземпляра...
Ну пусть будет хук на $user->read зарегистрирован.
Но $user у нас является экземпляром класса _db и у нас может быть также зарегистрирован хук на _db->read
физически то вызов обработчика идет один.
по идее тут напрашивается что сначала надо foreach для класса а потом foreach для экземпляра, но я не уверен что все учел... потому и спрашиваю :)
По сути события и хуки очень похожи и скорее всего являются промежуточным звеном развития до событийной модели, НО хуки это просто какие то функции вырывающиеся в определенном месте и соответственно появляются проблемы "а как добавить хук в другом месте?", "где их обрабатывать?", для механизма событий:
1) можно реализовать для базового класса(в Yii это CComponent) и затем создавая все классы путем расширения базового, отпадает вопрос а где же их обрабатывать, так как имеем единый механизм работы с ними
2) гибкий механизм добавления новых событий и их обработчиков
Просто описывает немного другой подход, обращаясь к тому же примеру попробую описать смысл:
что такое добавление комментария? я так понимаю должен быть специальный класс-модель отвечающий за выборку сохранение и другую работу с комментариями, а значит чтобы добавить комментарий в спец таблицу для модерации можно переопределить этот класс-модель добавив необходимую функциональность. Этот подход хорош конечно, но в случае если много добавочных модулей(как любят цмсники) захотят добавить свой кусочек кода каждый получится будет тянуть на себя одеяло и пытаться подключить именно свой класс-модель. Поэтому все таки надо стремиться к классической событийной модели.
По сути события и хуки очень похожи и скорее всего являются промежуточным звеном развития до событийной модели,
Хуки реально проще для восприятия, и как мне кажется лучше смотрятся во фреймворке с "низким порогом вхождения".
НО хуки это просто какие то функции вырывающиеся в определенном месте и соответственно появляются проблемы "а как добавить хук в другом месте?", "где их обрабатывать?",
В простейшем случае
args мы получаем через debug_backtrace примерно так:
т.е. $istio->hook в зависимости от количества параметров и первого параметра либо регистрирует хуки (бывают еще хуки вьюва и модели) либо обрабатывает хук примерно так как описано выше....
Ничего сложного... для добавления хука делать не надо...
для механизма событий:
1) можно реализовать для базового класса(в Yii это CComponent) и затем создавая все классы путем расширения базового, отпадает вопрос а где же их обрабатывать, так как имеем единый механизм работы с ними
аргумент, но учитывая что я не навязываю прикладнику ооп-парадигму, то для простоты приходится жертвовать.
2) гибкий механизм добавления новых событий и их обработчиков
у хуков он не менее гибкий.
Просто описывает немного другой подход
.....
но в случае если много добавочных модулей(как любят цмсники)
.....
Поэтому все таки надо стремиться к классической событийной модели.
Другой подход, который не не применим в моей задаче. К чему он здесь? :)
Хуки реально проще для восприятия, и как мне кажется лучше смотрятся во фреймворке с "низким порогом вхождения".
Процедурный стиль программирования тоже проще чем ООП, только вот разбираться в этой каше дело не благодарное... на пхп и так ООП "своеобразное", а то что с ним вытворяют вообще ужас :)