thinkphp5和3的区别
发布时间 - 2019-07-01 00:00:00 点击率:次首先声明本章节并非是指导升级旧的项目到5.0,而是为了使用3.X版本的开发者更快的熟悉并上手这个全新的版本。同时也强烈建议开发者抛弃之前旧的思维模式,因为5.0是一个全新的颠覆重构版本。
需要摒弃的3.X旧思想
URL的变动
首先对3.X的不严谨给开发者们带来的不正确的引导表示歉意,在5.0版本正式废除类似/id/1方式 可以通过‘get’获取到‘id’的方法,严格来讲这样的url是不属于$_GET的,现在可以通过‘param’获取,具体使用可以通过请求部分查询。
模型的变动
新版的模型查询返回默认‘对象’,系统默认增加了'toArray'方法,许多开发者在'all'或'select'尝试使用'toArray'来 转换为数组,在此希望开发者能理解‘对象’的概念,尝试使用‘对象’进行数据的使用,或者使用'db'方法进行数据库的操作,也提醒一下部分‘滥 用’'toArray'的开发者,'all'或'select
'结果是对象的数组集合,是无法使用'toArray'进行转换的。
新版变化
命名规范
目录和文件名采用‘小写+下划线’,并且以小写字母开头;类库、函数文件统一以.php为后缀;类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写);类名和类文件名保持一致,并统一采用驼峰法命名(首字母大写)
函数
系统已经不依赖任何函数,只是对常用的操作封装提供了助手函数;单字母函数废弃,默认系统加载助手函数,具体参考上一个章节‘助手函数’;
路由
5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式,具体这里不再赘述。
控制器
控制器的命名空间有所调整,并且可以无需继承任何的控制器类。
应用类库的命名空间统一为app(可修改)而不是模块名;控制器的类名默认不带Controller后缀,可以配置开启controller_suffix参数启用控制器类后缀;控制器操作方法采用return方式返回数据,而非直接输出;废除原来的操作前后置方法;
版本对比
3.2版本控制器写法
5.0版本控制器写法
namespace app\index\controller;class Index { public function index() { return 'hello,thinkphp!'; } }3.2版本控制器命名
IndexController.class.php
5.0版本控制器命名
Index.php
**在控制器中正确的输出模板**
5.0在控制器中输出模板,使用方法如下:
如果你继承think\Controller的话,可以使用:
return $this->fetch('index/hello');如果你的控制器没有继承 think\Controller的话,使用:
return view('index/hello');模型
如果非要对比与旧版本的改进,模型被分为数据库、模型、验证器三部分,分别对应M方法、模型、自动验证,同时均有所加强,下面做简单介绍。
数据库
5.0的数据库查询功能增强,原先需要通过模型才能使用的链式查询可以直接通过Db类调用,原来的M函数调用可以改用db函数,例如:
3.2版本
M('User')->where(['name'=>'thinkphp'])->find();5.0版本
db('User')->where('name','thinkphp')->find();模型
新版的模型查询增加了静态方法,例如:
User::get(1); User::all();User::where('id','>',10)->find();模型部分增强了很多功能,具体请查阅“模型章节”。
自动验证
对比旧的版本,可以理解为之前的自动验证且不同于之前的验证;
ThinkPHP5.0验证使用独立的\think\Validate类或者验证器进行验证,不仅适用于模型,在控制器也可直接调用,具体使用规则请参考“验证”章节,这里不再赘述。
配置文件
新版对配置很多的配置参数或者配置层次都和之前不同了,建议大家要么看看代码,要么仔细通读下官方的开发手册,不要因为配置的问题浪费自己一整天的时间。
异常
5.0对错误零容忍,默认情况下会对任何级别的错误抛出异常,并且重新设计了异常页面,展示了详尽的错误信息,便于调试。
系统常量的废弃
5.0版本相对于之前版本对系统变化进行了大量的废弃,用户如果有相关需求可以自行定义
下面是废除常量
REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH等
部分常量可以在Request里面进行获取,具体参考“请求章节”。
注:再次说明本章节仅仅为之前使用3.X版本开发者快速理解5.0所写,具体5.0的功能还需要开发者通读手册。
助手函数
5.0助手函数和3.2版本的单字母函数对比如下:
C config
E exception
G debug
L lang
T 废除
I input
N 废除
D model
M db
A controller
R action
B 废除
U url
W widget
S cache
F 废除
更多ThinkPHP相关技术文章,请访问ThinkPHP使用教程栏目进行学习!
# thinkphp # php # 常量 # 命名空间 # 封装 # select # 继承 # class # 对象 # input # 数据库 # 重构 # 可以通过 # 类库 # 链式 # 增加了 # 是一个 # 器中 # 如果你 # 也不 # 在此 # 下划线
相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571 】
相关推荐: JavaScript模板引擎Template.js使用详解 Java解压缩zip - 解压缩多个文件或文件夹实例 PythonWeb开发入门教程_Flask快速构建Web应用 如何快速搭建自助建站会员专属系统? ,怎么在广州志愿者网站注册? 合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍? php485函数参数是什么意思_php485各参数详细说明【介绍】 网站制作大概要多少钱一个,做一个平台网站大概多少钱? Python正则表达式进阶教程_复杂匹配与分组替换解析 专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站? 深圳防火门网站制作公司,深圳中天明防火门怎么编码? 如何实现javascript表单验证_正则表达式有哪些实用技巧 成都网站制作公司哪家好,四川省职工服务网是做什么用? Laravel如何实现用户注册和登录?(Auth脚手架指南) 什么是JavaScript解构赋值_解构赋值有哪些实用技巧 JavaScript如何操作视频_媒体API怎么控制播放 Laravel distinct去重查询_Laravel Eloquent去重方法 Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】 Android利用动画实现背景逐渐变暗 Laravel Admin后台管理框架推荐_Laravel快速开发后台工具 ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集 Laravel怎么清理缓存_Laravel optimize clear命令详解 Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】 Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】 Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】 Java类加载基本过程详细介绍 如何在阿里云香港服务器快速搭建网站? 如何在建站宝盒中设置产品搜索功能? 奇安信“盘古石”团队突破 iOS 26.1 提权 大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊? Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优 如何获取上海专业网站定制建站电话? 如何在万网ECS上快速搭建专属网站? 如何用PHP快速搭建CMS系统? 微信小程序 require机制详解及实例代码 Laravel怎么上传文件_Laravel图片上传及存储配置 使用豆包 AI 辅助进行简单网页 HTML 结构设计 如何在Windows虚拟主机上快速搭建网站? 极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异? 公司门户网站制作流程,华为官网怎么做? Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】 微信小程序 input输入框控件详解及实例(多种示例) 移动端脚本框架Hammer.js 如何登录建站主机?访问步骤全解析 关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework) edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】 常州企业网站制作公司,全国继续教育网怎么登录? html文件怎么打开证书错误_https协议的html打开提示不安全【指南】 Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门 Laravel如何实现用户密码重置功能?(完整流程代码)

