Heim  >  Artikel  >  php教程  >  PHP钩子系统

PHP钩子系统

WBOY
WBOYOriginal
2016-06-06 20:07:24819Durchsuche

实现类似于wordpress中的钩子的类: class Hook{??? //action hooks array????? private static $actions = array();??? /**???? * ads a function to an action hook???? * @param $hook???? * @param $function???? */??? public static function add_acti

实现类似于wordpress中的钩子的类:

class Hook
{
??? //action hooks array??
??? private static $actions = array();
??? /**
???? * ads a function to an action hook
???? * @param $hook
???? * @param $function
???? */
??? public static function add_action($hook,$function)
??? {???
??????? $hook=mb_strtolower($hook,CHARSET);
??????? // create an array of function handlers if it doesn't already exist
??????? if(!self::exists_action($hook))
??????? {
??????????? self::$actions[$hook] = array();
??????? }
??????? // append the current function to the list of function handlers
??????? if (is_callable($function))
??????? {
??????????? self::$actions[$hook][] = $function;
??????????? return TRUE;
??????? }
??????? return FALSE ;
??? }
?   /**
???? * executes the functions for the given hook
???? * @param string $hook
???? * @param array $params
???? * @return boolean true if a hook was setted
???? */
??? public static function do_action($hook,$params=NULL)
??? {
??????? $hook=mb_strtolower($hook,CHARSET);
??????? if(isset(self::$actions[$hook]))
??????? {
??????????? // call each function handler associated with this hook
??????????? foreach(self::$actions[$hook] as $function)
??????????? {
??????????????? if (is_array($params))
??????????????? {
??????????????????? call_user_func_array($function,$params);
??????????????? }
??????????????? else
??????????????? {
??????????????????? call_user_func($function);
??????????????? }
??????????????? //cant return anything since we are in a loop! dude!
??????????? }
??????????? return TRUE;
??????? }
??????? return FALSE;
??? }
?   /**
???? * gets the functions for the given hook
???? * @param string $hook
???? * @return mixed
???? */
??? public static function get_action($hook)
??? {
??????? $hook=mb_strtolower($hook,CHARSET);
??????? return (isset(self::$actions[$hook]))? self::$actions[$hook]:FALSE;
??? }
?   /**
???? * check exists the functions for the given hook
???? * @param string $hook
???? * @return boolean
???? */
??? public static function exists_action($hook)
??? {
??????? $hook=mb_strtolower($hook,CHARSET);
??????? return (isset(self::$actions[$hook]))? TRUE:FALSE;
??? }
}
??? /**
???? * Hooks Shortcuts not in class
???? */
??? function add_action($hook,$function)
??? {
??????? return Hook::add_action($hook,$function);
??? }
??? function do_action($hook)
??? {
??????? return Hook::do_action($hook);
??? }

用法举例:

//添加钩子
Hook::add_action('unique_name_hook','some_class::hook_test');
//或使用快捷函数添加钩子:
add_action('unique_name_hook','other_class::hello');
add_action('unique_name_hook','some_public_function');
//执行钩子
do_action('unique_name_hook');//也可以使用 Hook::do_action();

原文:http://neo22s.com/php-hook-system/

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn