您的位置:首页 > 编程语言 > PHP开发

理解ThinkPHP中的CBD“核心+行为+驱动”中的行为 Behavior

2016-06-27 17:12 573 查看
可以理解为一个函数的指针指向了别的地方的函数。

如果学过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中间的函
4000
数,类似与action_begin 和action_end中间的action。

官方文档上也说明了类似于java中的aop思想。

3.1.2的文档中包含了

app_init 应用初始化标签位

path_info PATH_INFO检测标签位

route_check 路由检测标签位

app_begin 应用开始标签位

action_name 操作方法名标签位

action_begin 控制器开始标签位

view_begin 视图输出开始标签位

view_template 视图模板解析标签位

view_parse 视图解析标签位

view_filter 视图输出过滤标签位

view_end 视图输出结束标签位

action_end 控制器结束标签位

app_end 应用结束标签位

这几种默认的。就是类似与上面的函数指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: