Наконец, пришло время поговорить о еще одной системе, занимающей в грядущем 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² с хуками и событиями, теперь вы сразу же разберетесь, что к чему.


Ценность таких постов оцениваешь по достоинству, тогда, когда что-то делаешь на движке.
А сейчас, только — спасибо!