ThinkPHP的钩子实现原理
来源:互联网 发布:找工作可靠的软件 编辑:程序博客网 时间:2024/05/30 07:13
ThinkPHP中钩子Hook机制的原理
钩子是一种触发机制,如同一个陷阱,当程序运行到某个地方时就会触发这个陷阱,然后执行这个Hook,执行完成后,系统根据执行的不同结果继续进行.
关于这个理解我第一次是在下面这篇博文上见到的:thinkphp钩子的实现
- 框架在\Think\Think->start()方法中调用Hook类中的import方法批量加载模式行为:默认为\Model\common.php中的配置文件,该文件定义行为扩展
- 通过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); }
0 0
- ThinkPHP的钩子实现原理
- thinkphp 3.2 钩子原理
- thinkphp 钩子的简单实现和总结
- 钩子系统原理及ThinkPHP 钩子分析
- 什么是钩子,钩子的原理
- 钩子的原理
- 钩子的原理
- 钩子的原理
- thinkphp C函数的实现原理
- VB 钩子的实现
- 键盘钩子的实现
- 键盘钩子的实现
- [转贴]钩子的原理[转贴]
- 钩子原理及实例:实现键盘钩子截获密码
- 钩子原理及实例:实现键盘钩子截获密码
- thinkphp 钩子 hook
- THINKPHP钩子方法
- VC++实现全局钩子勾住textout金山快译的原理实现
- POJ 1654 Area
- PLSQL Package 3
- html5编辑器(图片编辑器基于canvas)
- NuSMV运行样例解析
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
- ThinkPHP的钩子实现原理
- 求转置矩阵问题
- NuSmv安装与使用
- 简洁精美源于分析透彻,构思明确、求精,逻辑练达。(9)
- POJ3592 Instantaneous Transference题解
- 选项卡的实现
- 架构及未来-第4章
- PART IV 程序设计层 Chapter 6 问题求解和算法设计
- leetcode 29. Divide Two Integers