核心(Core):就是框架的核心代码,不可缺少的东西,TP本身是基于MVC思想开发的框架。
行为(Behavior) :行为在新版ThinkPHP的架构里面起着举足轻重的作用,在系统核心之上,设置了很多标签扩展位,而每个标签位置可以依次执行各自的独立行为。行为扩展就因此而诞生了,而且很多系统功能也是通过内置的行为扩展完成的,所有行为扩展都是可替换和增加的,由此形成了底层框架可组装的基础。
驱动( Driver ):数据库驱动、缓存驱动、标签库驱动和模板引擎驱动,以及外置的类扩展。
可以理解为一个函数的指针指向了别的地方的函数。
如果学过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_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 | 应用结束标签位 |