前言
不论是学习使用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