原理分析
通过Hook类中的import或add方法,将标签和类之间的对应关系(如‘app _ init’=array(‘common behavior init Hook’)加载到Hook类中的静态变量$tags中。执行Hook中的静态方法listen或exec方法时(在listen方法中调用exec),实例化标签对应的类,调用对应的方法(如果是插件,调用传递的方法,如果是行为,调用run方法)。
Hook中的执行方法定义如下:
静态公共函数exec ($ name,$ tag,$ params=null){ if(false===strps($ name,' '){//plugin(多个条目)$ class=' addons { $ name } { $ name } add } else {//行为扩展(只有一个run entry方法)$class=$name . '行为';$ tag=“run”;} $ addon=new $ class();返回$ addon-$ tag($ params);}ThinkPHP中的}行为
加载标签和类之间的对应关系
//加载模式行为定义if(isset($ mode[' tags ']){ hook :3360 import(is _ array($ mode[' tags '])?$ mode[' tags ']: include $ mode[' tags ']);}//加载应用程序行为定义if (is _ file (conf _ path。tags . PHP ')//允许应用程序添加开发模式配置定义hook:3360导入(包含conf _ path。tags . PHP ');模式行为对应
在thinkphp/mode/common.php中的tags标记中定义。
标记'=array ('app _ begin'=array('行为 readhtmlcache ',//读取静态缓存)、' app _ end'=array('行为 showpageTrace ',//页面跟踪显示)、View _ parse'=array('行为 parse template '、//模板解析支持PHP、内置模板引擎和第三方模板引擎)、' template _ filter'=array('行为内容替换'、//模板输出替换)、View _ filter'=array('行为 writehtmlcache '、//写入静态缓存)、)应用行为
在application/common/conf/tags . PHP中定义。
调用相应的行为
例如,hook : listen(' app _ begin ')相当于在BehaviorReadHtmlCache中调用run方法。如果您找到这个类,您可以按如下方式查看它对应的运行方法
自定义行为
1.在application/common/conf/tags . PHP中添加对应关系。
dqs _ behavior '=array(' common behavior dqs ')将对应关系添加到tags.php,程序会自动加载到Hook的$tags变量中,也可以使用Hook中的add方法手动加载。
2.定义公共行为类
?phpnamespace公共行为;使用思考行为;已定义(' THINK_PATH ')或exit();DqsBehavior类扩展了行为{ public function run($ content){ echo ' pre };Print_r('称为Dqs的行为');回声'/pre ';}}行为类是ThinkPHP自带的抽象类
3.呼叫行为
效果如下
自定义插件
1.定义插件文件
通过查看Hook文件中插件类的实例化模式($ class=' addons { $ name } { $ name } addon ';),我们可以知道,如果要定义一个名为Dqs的插件,应该在Addons/Dqs目录中定义DqsAddon.class.php文件。程序如下:
?phpnamespace Addons Dqsclass dqs addon { public $ info=array(' name '=' editor ',' title'=' dqs测试插件',' description'='主要用于输出',' status'=1,' author'='李德全',' version '=' 0.1 ');公共函数Dqstrace($ pa){ echo ' pre ';print _ r($ pa);回声'/pre ';}}2.注册插件
注册插件就是将插件的标记和类之间的对应关系添加到Hook类的静态变量$tags中。在行为方面,标识符只是一个标识符,任何标识符都可以定义,但是在插件方面,标识符不能任意定义,因为插件标识符代表插件的方法名。所以上面的插件注册码如下
Think hook : ADd(' Dqstrace ',数组(' Dqs ');3.调用插件
$ params=array(' name '=' dqs '); Think hook :3360 listen(' Dqstrace ',$ params);效果如下
以上ThinkPHP中关于行为扩展和插件的老生常谈(推荐)都是边肖分享给大家的内容,希望能给大家一个参考和支持。