理解ThinkPHP中的CBD“核心+行为+驱动”中的行为 Behavior 2013-08-11 13:14:03| 分类: 默认分类 | 标签:thinphp3 cbd 行为 |字号 订阅 可以理解为一个函数的指针指向了别的地方的函数。 如果学过C++可以用这个一个例子来解释: #include<iostream> using namespace std; void fun_behavior_1(){ cout<<"behavior_1_body"<<endl; } void fun_behavior_2(){ cout<<"behavior_2_body"<<endl; } class A{ private: void (*behavior_1)(); void (*behavior_2)(); void (*behavior_3)(); public: A(){ //init behavior_1 = NULL; behavior_2 = NULL; behavior_3 = NULL; //from somewhere to get the behavior_1 and behavior_2's function body. behavior_1 = (fun_behavior_1); behavior_2 = (fun_behavior_2); //also, behavior_3 is not found } void run(){ if(behavior_1){ behavior_1(); } if(behavior_2){ behavior_2(); } if(behavior_3){ behavior_3(); } } }; int main(){ A a; a.run(); } 所以 在thinkphp中的行为也类似于这样。定义好了函数的指针(就是tags数组的的key) 然后来调用key对应的value所描述的行为函数。 用更简单的例子来说明就是(PHP): class A{ function Behavior_1(){ echo "behavior_1"; } function Behavior_2(){ echo "behvior_2"; } function doSomething(){ echo "doSomething, code by yourself"; } function run(){ Behavior_1(); doSomething(); Behavior_2(); } } A a = new A(); a->run(); 这里的Behavior_1 Behavior_2函数可以改成自己的代码,就类似与自己指定,不指定的话 就执行默认的。 doSomething 就是在两个Behavior中间的函数,类似与action_begin 和action_end中间的action。 官方文档上也说明了类似于java中的aop思想。 3.1.2的文档中包含了 app_init应用初始化标签位path_infoPATH_INFO检测标签位route_check路由检测标签位app_begin应用开始标签位action_name操作方法名标签位action_begin控制器开始标签位view_begin视图输出开始标签位view_template视图模板解析标签位view_parse视图解析标签位view_filter视图输出过滤标签位view_end视图输出结束标签位action_end控制器结束标签位app_end应用结束标签位 这几种默认的。就是类似与上面的函数指针