ThinkPHP中的行为扩展和插件详解


原理分析

将标签与类之间的对应关系(如'app_init'=>array('Common\Behavior\InitHook')),通过Hook类中import或add方法,加载到Hook类中静态变量$tags中。当执行Hook中静态方法listen或者exec方法的时候(listen方法中调用了exec),实例化标签对应的类,调用相应的方法(如果是插件,调用传递的方法,如果是行为,调用run方法)。 
Hook中exec方法定义如下:

static public function exec($name, $tag,&$params=NULL) {
        if(false === strpos($name,'\\')) {
            // 插件(多个入口)
            $class   =  "Addons\\{$name}\\{$name}Addon";
        }else{
            // 行为扩展(只有一个run入口方法)
            $class   =  $name.'Behavior';
            $tag    =   'run';
        }
        $addon   = new $class();
        return $addon->$tag($params);
 }

ThinkPHP中的行为

http://blog.csdn.net/hsd2012/article/details/51658880