Powered by CodeIgniter

Уроки

(28)
14
16 голосов
Учиться, учиться и еще раз учиться — развитие личности идет таким путем.
Наконец, пришло время поговорить о еще одной системе, занимающей в грядущем cogear² ключевую роль. Речь, конечно же, идет о системе событий. Если вы еще не представляете картины происходящего, то навострите внимание.
Итак, у нас есть две разных шестеренки. Мы хотим связать их, да так, чтобы отключение/удаление одной из них не требовало вмешательства в код другой. Это только хардкорные программисты используют include и список модулей вбивают руками, в двадцать первом веке можно автоматизировать процесс, сделав работу с системой воистину удобной и быстрой.
  • Событие — это процесс, который имеет свое имя (для однозначной идентификации), и вызывает выполнение назначенных на него действий. Допустим, пользователь загрузил аватар, вы создаете событие и пропускаете через него. В результате данные, доступные всем закрепленным за событием действиям, могут быть изменены в процессе их выполнения.
    $cogear->event('rain.falls',$this); // аналог или ярлык event('rain.falls',$this); // Аргументов можно задать любое количество event('snow.melt',$this,$one,$two…,$end);
  • Хук (от англ. «крюк») — это метод закрепления некоторого действия за событием.
    $cogear->hook('rain.falls',array($this,'someMethod')); hook('rain.falls',array($this,'openUmbrella'));

Считаю наиболее логичным и рациональным «вешать» хуки в методе инициализации шестеренки. Если она включена, то будет проинициализирована. Как только она выпадает из праздника жизни, допустим по причине нестыковке с другой шестеренкой (зависимость между шестеренками тоже устанавливается), то ее хуки также становятся неактивными.

class My_Gear extends Gear { … public function init(){ parent::init(); hook('rain.falls',array($this,'openUmbrella')); } … public function openUmbrella($Object,$one,$two…,$end){ $Object->setText('What the wonderful day!'); } } Обратите внимание, что действие представляет собой обыкновенный обратный вызов(callback). Причем, если вы укажите несуществующий callback, то он, конечно, не исполнится. Поэтому следите за правильностью ввода имени метода.

Кроме того, вы можете передавать аргументы и в хук. Тогда они будут подкрепляться перед аргументами события.
hook('rain.falls',array($this,'openUmbrella'),$shoes_dry_flag); … public function openUmbrella($shoes_dry_flag,$Object,$one,$two…,$end){ $Object->setText('What the wonderful day!'); } … Иногда это бывает полезно.

Помните, что обратным вызовом может быть и простая функция.
array($Object,'method') → вызов метода объекта 'someFunc' → вызов функции // удобно для использования ярлыков // Как вариант при обращении в другую шестеренку // Придумал еще давно, но ни разу пока не было нужды в таком синтаксисе. 'Gear->method'
Скоро мы поговорим на тему стандартов кодирования. В предшествии этому скажу, что функции я создаю лишь как ярлыки к методам классов, чтобы сократить набираемый код.

Полный список системных событий станет доступен к релизу в документации.

Надеюсь, встретившись в коде cogear² с хуками и событиями, теперь вы сразу же разберетесь, что к чему.
22:58 ← 30 июля 2011 Отправить в Твиттер adminadmin  RSS comments 3

Комментарии (3) ↓

inetlover inetlover time 23:27 ← 30 июля 2011 #
Напоминает Когир уан.

Ценность таких постов оцениваешь по достоинству, тогда, когда что-то делаешь на движке.
А сейчас, только — спасибо!
Автор
admin admin time 23:58 ← 30 июля 2011 #
Пожалуйста!
JiLiZART JiLiZART time 00:36 ← 31 июля 2011 #
нее в cogear one там хуки в файле 1 лежали, тут же с хуками можно делать что угодно, в общем ооочень гибкая штука получилась, гибче чем раньше была.