//注册钩子 参数名相同我要写如何写一个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)
{
    //这里如何写判断相同参数对应的不同事件 如何判断 
}

解决方案 »

  1.   


    就是插件机制,任何一个成熟点的代码都会涉及到,实现各有不同,你可以找些代码来阅读下。
    原理其实很简单,比如你注册个新用户
    伪代码如下: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,还是先触发另外一个?这个就需要你去配置了.