Улучшенная система PHP-хуков
Ранее я уже писал заметку о хуках в PHP, о том, что это такое, и даже предлагал свой метод расширения возможностей уже объявленных функций. Как всегда, практика - критерий истины, и, начав применять этот метод на практике, я нашел его довольно сложным и муторным в применении, так как в каждую функцию в конце приходится встраивать довольно громоздкую конструкцию, указывая там и имя функции, и массив ее аргументов, и возвращаемое значение, не забыв получить еще и глобальный массив $hook (кто не в курсе, прочитайте оригинальную статью).
Порывшись в мануале, мне удалось модифицировать технологию, упростив в разы ее использование с помощью встроенной функции debug_backtrace(). В результате получилась вот такая функция:
function hook($result){
global $hook;
$d_backtrace=debug_backtrace();
$backtrace=is_array($d_backtrace[1])?$d_backtrace[1]:$d_backtrace;
$functions=@$hook[$backtrace['function']];
$args=$backtrace['args'];
if(is_array($functions)){
ksort($functions);
foreach($functions as $function)
if($function&&function_exists($function))
$result=$function($result,$args);
}
return $result;
}
Как и раньне, при этом подходе используется двумерный массив $hook, ключами первого уровня являются имена оригинальных функций, а значениями второго уровня являются имена хук-функций к ним.
В структуре хук-функций без изменений. Они принимают 2 параметра: возвращенное значение, и массив исходных аргументов.
Пример использования можно смотреть здесь.
Новые модели сотовых телефонов. Обзоры и цены.
- Статьи схожей тематики:

Комментарии(4):
rss-лентаДобавлено: 2009-09-08 08:45:47, Katyusya
Добавлено: 2009-10-12 23:00:12, инт
Добавлено: 2010-04-04 11:01:36, dima
Добавлено: 2010-05-02 12:27:56, olean