//注册钩子 参数名相同我要写如何写一个function 来对不同的事件做触发事件。
$hooks_array = array('register_success' => 'user_id','ucp_login_success' => 'user_id','acp_login_success' => 'user_id');//事件=>参数
add_hooks($this->apps_name, $hooks_array);public function user_id($param_ary)
{
//这里如何写判断相同参数对应的不同事件 如何判断
}
$hooks_array = array('register_success' => 'user_id','ucp_login_success' => 'user_id','acp_login_success' => 'user_id');//事件=>参数
add_hooks($this->apps_name, $hooks_array);public function user_id($param_ary)
{
//这里如何写判断相同参数对应的不同事件 如何判断
}
就是插件机制,任何一个成熟点的代码都会涉及到,实现各有不同,你可以找些代码来阅读下。
原理其实很简单,比如你注册个新用户
伪代码如下:PHP code
//表示引入user类型的插件,简单来说,user是个目录,目录下有特定规则的类文件名,include它们,实例化下。
$plugin = & Factory::get('plugin','user');
if(!$_POST['user_id'])
{//添加注册用户
//表示触发beforeUserRegister事件(预留钩子),也就是user目录下所有类文件里的beforeUserRegister方法,$_POST作为参数传进去.
$re = $plugin->trigger('beforeUserRegister',array($_POST));
//处理注册信息
doRegister($_POST);
//原理同上
$re = $plugin->trigger('afterUserRegister',array($_POST));
}
插件有个问题是执行顺序的设定,有些用数据库(后台可管理,比如joomla),有些直接用文件.
意思是,比如/plugin/user/ 目录下有2个插件文件,也就是上面代码中会触发的两个插件.
它们是
plug_check.php
plug_auth.php
它们内部的类名和文件名是挂钩的,这样才可以include文件的同时,实例化他们.当然你不用类文件的方式来实现插件也可以,只要你设计好一定的规范.
plug_check.php:PHP codeclass PlugCheck extends Plugin
{
function beforeUserRegister($post){}
function afterUserRegister($post){}
}
plug_auth.php:PHP codeclass PlugAuth extends Plugin
{
function beforeUserRegister($post){}
function afterUserRegister($post){}
}那么这时候问题就出来了,在处理注册之前,我是先触发plug_check.php文件的PlugCheck类的beforeUserRegister,还是先触发另外一个?这个就需要你去配置了.