Maison > php教程 > php手册 > le corps du texte

PHP钩子系统

WBOY
Libérer: 2016-06-06 20:07:24
original
822 Les gens l'ont consulté

实现类似于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);
??? }
Copier après la connexion

用法举例:

//添加钩子
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();
Copier après la connexion

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!