温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

thinkphp钩子指的是什么意思

发布时间:2020-12-31 14:53:09 来源:亿速云 阅读:146 作者:小新 栏目:编程语言

了解thinkphp钩子指的是什么意思?这个问题可能是我们日常学习或工作经常见到的,希望通过这个文章能让大家收获颇深,下面是小编给大家带来的参考内容,让我们一起来看看吧!

首先,钩子是一种触发机制,如同一个陷阱,当程序运行到某个地方时就会触发这个陷阱,然后执行这个Hook,执行完成后,系统根据执行的不同结果继续进行

那么,thinkphp钩子(Hook)机制的原理是什么呢?

1、框架在\Think\Think->start()方法中调用Hook类中的import方法批量加载模式行为:默认为\Model\common.php中的配置文件,该文件定义行为扩展

thinkphp钩子指的是什么意思

2、通过Hook:listen()方法监听tag标记的行为.Hook类中定义一个数组tags:tag为key;Behavior行为是value.通过Hook:exec()执行该标记的行为插件

 /**
     * 监听标签的插件
     * @param string $tag 标签名称
     * @param mixed $params 传入参数
     * @return void
     */
    static public function listen($tag, &$params=NULL) {
        if(isset(self::$tags[$tag])) {
            if(APP_DEBUG) {
                G($tag.'Start');
                trace('[ '.$tag.' ] --START--','','INFO');
            }
            foreach (self::$tags[$tag] as $name) {
                APP_DEBUG && G($name.'_start');
                $result =   self::exec($name, $tag,$params);
                if(APP_DEBUG){
                    G($name.'_end');
                    trace('Run '.$name.' [ RunTime:'.G($name.'_start',$name.'_end',6).'s ]','','INFO');
                }
                if(false === $result) {
                    // 如果返回false 则中断插件执行
                    return ;
                }
            }
            if(APP_DEBUG) { // 记录行为的执行日志
                trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO');
            }
        }
        return;
    }

    /**
     * 执行某个插件
     * @param string $name 插件名称
     * @param string $tag 方法名(标签名)     
     * @param Mixed $params 传入的参数
     * @return void
     */
    static public function exec($name, $tag,&$params=NULL) {
            if('Behavior' == substr($name,-8) ){
            // 行为扩展必须用run入口方法
            $tag    =   'run';
        }
        $addon   = new $name();
        return $addon->$tag($params);
    }

感谢各位看完上述内容,你们对“thinkphp钩子指的是什么意思”这篇文章大概了解了吗?希望文章的内容对大家有所帮助,如果想了解更多相关文章内容,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI