Thinkphp3.2版本与版本5的区别
URL的变动
命名规范
目录和文件名采用‘小写+下划线’,以小写字母开头;
类库、函数文件统一以.php为后缀;
类的文件名均以命名空间定义,且命名空间的路径和类库文件所在路径一致(包括大小写);
数据库
模型链式查询==>调用db类(M函数==>db函数):
M('User')->where(['name'=>'thinkphp'])->find();
db('User')->where('name','thinkphp')->find();
路由
不再支持普通URL模式、正则路由定义,全部改为规则路由配合变量规则(正则定义)的方式
模型
模型查询新增静态方法,完全面向对象,且必须有对应模型类(D函数==>model函数)
D('User')->where(['name'=>'thinkphp'])->find();
model('User')->where('name','thinkphp')->find();
控制器
调整命名空间,可无需继承任何控制器类
应用类库命名空间统一为app
控制器的类名默认不带Controller后缀
操作方法采用return返回数据
废除操作前后置方法
输出模板
继承think\Controller:return $this->fetch('index/hello');
没有继承think\Controller:return view('index/hello');
自动验证和自动完成
通过think\Validate类统一验证,模型里定义修改器完成
异常
展示详尽错误信息,便于调试
调试和日志
支持浏览器控制台查看Trace信息,采用SocketLog支持远程调试
常量
系统常量的废弃,仅保留框架的路径常量定义
函数
不依赖任何函数,只是对常用的操作封装提供了助手函数
容器与依赖注入
将类的实例作为参数,传递给类方法,自动触发依赖注入==> 相当于直接实例化类,可以直接调用类方法、属性
容器:对象打包器
依赖注入:把对象传入到方法中使用
绑定闭包到容器:闭包,即匿名函数,绑定到容器,仅需将匿名函数变量以键值对传入
Facade
①指定绑定:创建一个类,继承 \think\Facade ,静态方法绑定要代理的类,在另一空间use该代理类,静态调用
②动态绑定:\think\Facade::bind(‘代理类’,'要绑定的类'),静态调用
==>相当于实例化后调用方法、属性,①②区别在于是否在静态代理类绑定指定类名
入口文件:public/index.php
载入基类:thinkphp/base.php(完成核心类注册:到容器、静态代理)
e.g
传统实例化:new Request()
静态代理:think\facade\Request
依赖注入:Request $request
父类Controller中的属性$request:$this->request