前言

不论是学习使用tp3/tp5还是面试,我们经常都会提到thinkPHP3和thinkPHP5的一些区别有哪些,下面我对这两者的一些区别做了一些总结(表面的区别,并不涉及内核)

1. 控制器输入函数不同

在tp3中,我们输出视图是$this->display();,但是在tp5中,输出视图函数是$this->fetch();

 

2. 单字母函数的去除

在tp3中,我们可能会经常使用到的一些单字母函数已经移除(如:M(),D(),U(),S(),C()),但是仍然保留了助手函数的概念,但官方开发推荐尽量少用(未来可能会移除)

M()=>db()

D()=>model()

3. 对TP3的模型类getField方法进行拆分

一个是value方法:用于查询某行的某个值

一个是column方法:用于查询某列的值

用法如下:

//返回某字段的值

db(‘think_user’)->where(‘id’,1)->value(‘name’);

//返回某列的值

//返回数组

db(‘think_user’)->where(‘status’,1)->column(‘name’);

//返回指定ID字段的作为索引的数据

db(‘think_user’)->where(‘status’,1)->column(‘name’,’id’);

 

注意:之前的聚合查询方法仍然有效,比如:count(),max()等等

 

4. TP5中的URL不区分大小写

用案例说明就明白了

域名/index/UserType/addType和域名//index/usertype/addtype访问的效果是一样的

 

如果要求区分大小写可以配置url_convert参数,将其设置为false

 

5. 界定符的变化

TP3中的模板标签界定符是<>

TP5中的模板标签界定符是{}

 

6. 控制器类名和模型类不带后缀

7. 数据库操作写法不同

TP3:M(‘User’)->where([‘name’=>’thinkphp’])->find();

TP5:db(‘User’)->where(‘name’,’thinkphp’)->find();

 

8. 请求对象和响应对象

TP5中增加了请求对象Request和响应对象Response,前者统一处理请求和获得请求信息,后者负责输出客户端或浏览器响应。

 

9. 简化常量

TP5抛弃了TP3很多常量定义,仅保留框架路径常量定义,其余常量可以通过App类或者Resquest类的相关属性和方法进行定义,或者自己重新定义需要的常量

REQUEST_METHOD

IS_GET

IS_PSOT

IS_PUT

IS_DELETE

IS_AJAX

__EXT__

COMMON_MOUDULE

MODULE_NAME

CONTROLLER_NAME

ACTION_NAME

APP_NAMESPACE

APP_DEBUG

MODULE_PATH