Как сделать систему крючков PHP?

Как вы внедряете систему крючков в приложение PHP для изменения кода до или после его выполнения. Как будет базовая архитектура класса hookloader для PHP CMS (или даже простого приложения). Как тогда это можно было бы расширить до полного загрузчика плагинов/модулей?

(Кроме того, существуют ли какие-либо книги или учебные пособия в системе крючков CMS?)

Ответ 1

Вы можете создать систему событий как просто или сложную, как вы этого хотите.

/**
 * Attach (or remove) multiple callbacks to an event and trigger those callbacks when that event is called.
 *
 * @param string $event name
 * @param mixed $value the optional value to pass to each callback
 * @param mixed $callback the method or function to call - FALSE to remove all callbacks for event
 */
function event($event, $value = NULL, $callback = NULL)
{
    static $events;

    // Adding or removing a callback?
    if($callback !== NULL)
    {
        if($callback)
        {
            $events[$event][] = $callback;
        }
        else
        {
            unset($events[$event]);
        }
    }
    elseif(isset($events[$event])) // Fire a callback
    {
        foreach($events[$event] as $function)
        {
            $value = call_user_func($function, $value);
        }
        return $value;
    }
}

Добавить событие

event('filter_text', NULL, function($text) { return htmlspecialchars($text); });
// add more as needed
event('filter_text', NULL, function($text) { return nl2br($text); });
// OR like this
//event('filter_text', NULL, 'nl2br');

Затем назовите его следующим образом

$text = event('filter_text', $_POST['text']);

Или удалите все обратные вызовы для этого события, такие как

event('filter_text', null, false);