thinkPHP3.x - thinkPHP5.x 区别记录( 踩坑 整理 收集 等 ... )

thinkPHP3.x - thinkPHP5.x 区别记录( 踩坑 整理 收集 等 … )

绪:

我是一个3.x的使用者,最近才接触5.x(挺晚了),改动很大,在我使用的新的的过程中肯定会遇到各种各样的问题,因此想着用一篇文章记录一下,一是到时候自己遇到了比较好找问题或处理,不用再二次费力;二是给同样有需要的人使用;三是希望自己学到更多吧。我会慢慢收集我所遇到的,大家有新增加的可以在评论区加等。总之怎么舒服怎么来。

我看的几篇有帮助的文章:

http://www.thinkphp.cn/topic/64201.html(TP3.2系统升级到5.1的教程)
https://www.kancloud.cn/manual/thinkphp5/118003(5.0开发手册)

1.入口文件

3.x的入口文件时index.php,但是在5.x里就没有这个文件了,我第一次看到的时候还有点迷,其实5.x的真正的路口文件是在public里,使用5.x的第一步就是修改入口文件,方式有两种:
①在根目录种新建一个index.php文件,内容:<?php require('public/index.php'); ?>
②删除public/index.php这个文件,然后根目录下新建一个index.php,内容是:

<?php
//应用目录
define('APP_PATH',__DIR__.'/apps/');
//加载框架引导文件
require './thinkphp/start.php';
?>

来源:https://tieba.baidu.com/p/5215297961

2.debug功能

3.x的debug默认打开,但是5.x的debug默认关闭,打开的方式是修改配置文件:

'app_debug' => true,//启动应用调试模式
'show_error_msg' => true,//启动显示错误信息

来源:https://tieba.baidu.com/p/5215297961

3.URL变动

在5.0版本正式废除类似/id/1方式 可以通过get获取到id的方法,严格来讲这样的url是不属于$_GET的,现在可以通过param获取,具体使用可以通过请求部分查询。

来源:https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204

4.命名规范
  • 目录和文件名采用‘小写+下划线’,并且以小写字母开头;
  • 类库、函数文件统一以.php为后缀;
  • 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写);
  • 类名和类文件名保持一致,并统一采用驼峰法命名(首字母大写)

来源:https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204

5.控制器
  • 控制器的命名空间有所调整,并且可以无需继承任何的控制器类。
  • 应用类库的命名空间统一为app(可修改)而不是模块名;
  • 控制器的类名默认不带Controller后缀,可以配置开启controller_suffix参数启用控制器类后缀;
  • 控制器操作方法采用return方式返回数据,而非直接输出;
  • 废除原来的操作前后置方法;

版本对比

3.2版本控制器写法

<?php
namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller 
{
    public function hello()
    {
        echo 'hello,thinkphp!';
    }
}

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');

来源:https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204

6.助手函数

部分对比:

3.x版本5.x版本
Cconfig
Eexception
Gdebug
Llang
T废除
Iinput
N废除
Dmodel
Mdb
Acontroller
Raction
B废除
Uurl
Wwidget
Scache
F废除

来源:https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204

7.废除的系统常量
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等

IS_POST 替换为:request()->isPost()
IS_GET 替换为:request()->isGet()
IS_AJAX 替换为:request()->isAjax()

来源:https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204

8.模型

新版的模型查询增加了静态方法,例如:

User::get(1); 
User::all();
User::where('id','>',10)->find(); 

新版的模型查询返回默认对象,系统默认增加了toArray方法,许多开发者在all或select尝试使用toArray来转换为数组,在此希望开发者能理解对象的概念,尝试使用对象进行数据的使用,或者使用db方法进行数据库的操作,也提醒一下部分滥用toArray的开发者,all或select结果是对象的数组集合,是无法使用toArray进行转换的。(原本例如find等方法返回的是数组,如今变为了对象,使用toArray方法可以转换)。

来源:https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204

9.数据库相关

原先需要通过模型才能使用的链式查询可以直接通过Db类调用,原来的M函数调用可以改用db函数,例如:
3.2版本

M('User')->where(['name'=>'thinkphp'])->find();

5.0版本

db('User')->where('name','thinkphp')->find();

在TP3.2的模型中,create方法但创建数据对象 但不保存到数据库;在TP5中,create方法是创建并写入数据库,并返回数据实例。

来源:
https://www.kancloud.cn/manual/thinkphp5/163239#V32V50_204
http://www.thinkphp.cn/topic/64201.html

10.前端相关

模板标签规则:
// 标签库标签开始标记
‘taglib_begin’ => ‘<’,
// 标签库标签结束标记
‘taglib_end’ => ‘>’,
变为:
// 标签库标签开始标记
‘taglib_begin’ => ‘{’,
// 标签库标签结束标记
‘taglib_end’ => ‘}’,

包含js,css,图片文件直接写Public下的路径就可以了,不用再使用PUBLIC了
控制器里边忘了一点,__SELF__改为用requet()了
前端能用的公共函数原来放在ThinkPHP/Common/functions,现在放在thinkphp/helpe

来源:
http://www.thinkphp.cn/topic/64201.html
https://tieba.baidu.com/p/5215297961

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值