InitPHP框架Hook机制解读
来源:互联网 发布:淘宝 宝贝 下架时 编辑:程序博客网 时间:2024/04/29 09:06
wordpress受到大部分人的追捧是因为它有一个强大的挂件机制,这个机制可以让全世界各地不同的开发者参与进来,并且不影响原有核心程序代码。
今天来分析下,initphp框架中对hook的处理:
/** *InitPHP Hook钩子函数 * * @param string $class 钩子名称 * @param array $function * @return object */public static function hook($hookname, $data = '') {global $InitPHP_conf;//配置文件$hookconfig = $InitPHP_conf['hook']['path'] . '/' . $InitPHP_conf['hook']['config'];if (!isset(self::$instance['inithookconfig']) && file_exists($hookconfig)) {self::$instance['inithookconfig'] = require_once($hookconfig);}if (!isset(self::$instance['inithookconfig'][$hookname])) return false;if (!is_array(self::$instance['inithookconfig'][$hookname])) {self::_hook(self::$instance['inithookconfig'][$hookname][0], self::$instance['inithookconfig'][$hookname][1], $data);} else {foreach (self::$instance['inithookconfig'][$hookname] as $v) {self::_hook($v[0], $v[1], $data);}}}/** *InitPHP Hook钩子具体处理函数 * * @param string $class 钩子的类名 * @param array $function 钩子方法名称 * @return object */private static function _hook($class, $function, $data = '') {global $InitPHP_conf;//类处理if (preg_match('/[^a-z0-9\-_.]/i', $class)) return false;$file_name = $InitPHP_conf['hook']['path'] . '/' . $class . $InitPHP_conf['hook']['file_postfix']; $class_name = $class . $InitPHP_conf['hook']['class_postfix']; //类名if (!file_exists($file_name)) return false;if (!isset(self::$instance['inithook'][$class_name])) {require_once($file_name);if (!class_exists($class_name)) return false;$init_class = new $class_name;self::$instance['inithook'][$class_name] = $init_class;}if (!method_exists($class_name, $function)) return false;return self::$instance['inithook'][$class_name]->$function($data);}
这两个函数是initphp.php核心运行类文件中的两个函数,使用方法:InitPHP::hook('钩子名称','额外传递参数'),钩子可以在Controller中直接使用,也可以在模板中使用。钩子放置一般在程序员开发中,大概知道这个地方会扩展,但是现在项目中又不需要开发这个功能的时候,可以放置一个钩子。
/*************initphp.conf.php配置*************//* hook插件机制 - 插件文件目录 */$InitPHP_conf['hook']['path'] = 'lib/hook'; //插件文件夹目录, 不需要加'/'$InitPHP_conf['hook']['class_postfix'] = 'Hook'; //默认插件类名后缀$InitPHP_conf['hook']['file_postfix'] = '.hook.php'; //默认插件文件名称$InitPHP_conf['hook']['config'] = 'hook.conf.php'; //配置文件
可以看到这个是框架的一个hook配置类,可以配置钩子实现的类的存放文件夹、后缀名称、配置文件名称等。
/* hook的实现,都依赖于hook.conf.php配置文件 每个钩子实现都需要配置这个挂载conf *//* * 钩子名称 => array(array('挂钩上对应的类名称', '函数名称')) 一个挂钩多个函数 * 钩子名称 => array(挂钩上对应的类名称,函数名称) //一个挂钩一个钩子函数 */return array( //guest挂钩,InitPHP::hook('guest','Hook'); 在程序中放置钩子,guest钩子名称,Hook传递的参数 'guest' => array( array('test', 'run'), array('test', 'aa') ));
这个是hook.conf.php,挂钩的配置文件,这个配置文件存放在hook文件的目录下面,这个配置文件告诉挂钩,你的挂钩上加载了哪些类的函数。
/* 实现钩子,test.hook.php *///一个测试的钩子class testHook { public function run($data) { echo '第一个简单的' . $data; } public function aa($data) { echo '<BR>第二个简单的' . $data; }}
具体实现钩子函数。这个类名为test,实现了一个run函数和一个aa函数,这两个函数挂载在上面配置文件中的guest钩子函数上,这样只要在使用InitPHP::hook('guest')都会来触发这两个函数。
- InitPHP框架Hook机制解读
- InitPHP框架
- tp5框架中的hook机制
- tp5框架中的hook机制
- InitPHP开源框架load函数分析
- 国产InitPHP框架系列 - InitPHP3.2.1 发布
- 国产InitPHP框架系列 - InitPHP3.8 发布
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用01:创建项目
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用02:深入控制器应用
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用03:模板View使用
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用04:服务层Service使用
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用05:数据层Dao使用
- 解读WEB层框架的核心机制
- InitPHP轻量级WEB应用框架,码农试用,推荐
- InitPHP框架搭建高可用WEB应用01
- 【ci框架】源代码解读:利用Hook.php文件完成ci框架功能的扩展
- 国产InitPHP框架系列 - 两年沉淀,InitPHP3.2.2 框架发布,一个轻量级PHP框架
- 国产InitPHP框架系列 - InitPHP3.2发布了,可能是一个不错的PHP框架哦..
- EAN码详解
- hadoop基准测试
- 数据恢复~硬盘底层工作
- XCode、Cocoa开发中使用第三方dylib的方法
- 体检之一:体检豪华套餐
- InitPHP框架Hook机制解读
- VB源码--TXT文件尾部追加资料,可用于记录日志及数据添加等用途
- 下载频道用户使用指南!!
- Groovebug旨在打造音乐领域的Flipboard
- MVC 3.0 学习网址
- oracle中的''和null
- gethibernatetemplate find条件查询方法
- JAVA 删除文件
- 使用SQL SERVER 数据库存取BMP等大数据的方法