>PHP 프레임워크 >ThinkPHP >thinkphp3과 thinkphp5의 차이점

thinkphp3과 thinkphp5의 차이점

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-06-19 15:43:253977검색

thinkphp3과 thinkphp5의 차이점

thinkphp3과 thinkphp5의 차이점은 무엇인가요? 두 가지의 차이점을 소개하겠습니다:

1. thinkphp3.2와 thinkphp5의 사용법 차이점#🎜 🎜# 1. 이전 단일 문자 함수는 다음과 같이 완전히 대체되었습니다:

S=>cache,C=>config,M/D=>model,U=>url,I=>input,E=>exception,L=>lang,A=>controller,R=>action

2. 템플릿 렌더링:

$this->display() => return view()/return $this->fetch();

3. 🎜🎜#
$this => Db::table($this->table)

4. 새 컨트롤러 및 모델을 생성할 때 이름 지정:

① 컨트롤러에서 접미사 컨트롤러 제거: UserController => 모델에서 접미사 모델 제거: UserModel => User

5. URL 액세스:

컨트롤러 이름이 Camel Case를 사용하는 경우 Each에 액세스할 때 입력해야 합니다. 문자에 액세스하려면 밑줄로 연결됩니다.

eg: 컨트롤러 이름은 AddUser이며 액세스는 add_user

6을 사용하여 수행됩니다. TP5에서는 보조 매개변수(예: 2차원 배열) 및 구성을 지원합니다. files , 보조 구성 매개변수를 읽습니다:

①Config::get('user.type');

②config('user.type');

7. 템플릿은 삼항 연산자 연산을 지원합니다:

{$info.status ? $info.msg : $info.error}还支持这种写法:{$varname.aa ?? 'xxx'}或{$varname.aa ?: 'xxx'}

관련 권장 사항: "

php 비디오 튜토리얼

"

8 , TP5 내장 -in 태그:

시스템에 내장된 태그 중 volist, switch, if, elseif, else, foreach, Compare(모든 비교 태그 포함), (not)present, (not)empty, (not) 정의됨.9. TP5 데이터 유효성 검사:

$validate = new Validate(['name' => 'require|max:25','email' => 'email']);
$data = ['name' => 'thinkphp','email' => 'thinkphp@qq.com'];
if(!validate->check($data)){
debug::dump($validate->getError());
}

참고: 유효성 검사기를 인스턴스화하려면 도우미 함수를 사용하세요. - $validate = verify('User'); # 🎜🎜#

10. TP5는 내장 페이징을 구현하며 다음을 사용합니다.

상태 1의 사용자 데이터를 쿼리하고 페이지당 10개의 데이터를 표시합니다

$list = model('User')->where('status',1)->paginate(10);
$page = $this->render();
$this->assign('_list',$list);
$this->assign('_page',$page);
return $this->fetch();
# 🎜🎜# 템플릿 파일의 페이징 출력 코드는 다음과 같습니다:

<div>{$_page}</div>

둘째, thinkphp3.2와 thinkphp5 데이터베이스 작업 비교

# 🎜🎜#

데이터 추가

thinkhp3.2

//添加单条数据$User = M(&#39;User&#39;);
$data[&#39;name&#39;] = &#39;ThinkPHP&#39;;
$data[&#39;email&#39;] = &#39;ThinkPHP@gmail.com&#39;;
$User->create($data);
$User->add($data);//添加多条数据$dataList[] = array(&#39;name&#39;=>&#39;thinkphp&#39;,&#39;email&#39;=>&#39;thinkphp@gamil.com&#39;);
$dataList[] = array(&#39;name&#39;=>&#39;onethink&#39;,&#39;email&#39;=>&#39;onethink@gamil.com&#39;)
$User->addAll($dataList);
thinkphp5
//添加单条数据$data = [&#39;foo&#39; => &#39;bar&#39;, &#39;bar&#39; => &#39;foo&#39;];
Db::table(&#39;think_user&#39;)->insert($data);//添加多条数据$data = [
    [&#39;foo&#39; => &#39;bar&#39;, &#39;bar&#39; => &#39;foo&#39;],
    [&#39;foo&#39; => &#39;bar1&#39;, &#39;bar&#39; => &#39;foo1&#39;],
    [&#39;foo&#39; => &#39;bar2&#39;, &#39;bar&#39; => &#39;foo2&#39;]
];
Db::name(&#39;user&#39;)->insertAll($data);

데이터 수정 #####ThinkHP3.2###
$User = M("User"); // 实例化User对象// 要修改的数据对象属性赋值
$data[&#39;name&#39;] = &#39;ThinkPHP&#39;;$data[&#39;email&#39;] = &#39;ThinkPHP@gmail.com&#39;;
$User->where(&#39;id=5&#39;)->save($data); // 根据条件更新记录
where(&#39;id=5&#39;)->setField(&#39;name&#39;,&#39;ThinkPHP&#39;);
$data = array(&#39;name&#39;=>&#39;ThinkPHP&#39;,&#39;email&#39;=>&#39;ThinkPHP@gmail.com&#39;);// 更改用户的name值
$User-> where(&#39;id=5&#39;)->setField($data);更改用户的name和email的值
$User->where(&#39;id=5&#39;)->setDec(&#39;score&#39;,5); // 用户的积分减5
$User->where(&#39;id=5&#39;)->setInc(&#39;score&#39;,3); // 用户的积分加3
####thinkhp5###
Db::table(&#39;think_user&#39;)->update([&#39;name&#39; => &#39;thinkphp&#39;,&#39;id&#39;=>1]);//更新数据表中的数据
Db::table(&#39;think_user&#39;) ->where(&#39;id&#39;,1) ->setField(&#39;name&#39;, &#39;thinkphp&#39;);//更新某个字段的值
Db::table(&#39;think_user&#39;)->where(&#39;id&#39;, 1)->setInc(&#39;score&#39;,5);// score 字段加 5
Db::table(&#39;think_user&#39;)->where(&#39;id&#39;, 1)->setDec(&#39;score&#39;, 5);// score 字段减 5
Db::table(&#39;think_user&#39;)->where(&#39;id&#39;, 1)->setInc(&#39;score&#39;, 1, 10);//支持延时更新
#🎜🎜 ####데이터 삭제#####ThinkHP3.2#🎜🎜 #
$User->delete(&#39;1,2,5&#39;); // 删除主键为1,2和5的用户数据
$User->where(&#39;status=0&#39;)->delete(); // 删除所有状态为0的用户数据
#🎜🎜 #thinkphp5

// 根据主键删除Db::table(&#39;think_user&#39;)->delete(1);
Db::table(&#39;think_user&#39;)->delete([1,2,3]);// 条件删除    
Db::table(&#39;think_user&#39;)->where(&#39;id&#39;,1)->delete();
Db::table(&#39;think_user&#39;)->where(&#39;id&#39;,&#39;<&#39;,10)->delete();

셋째, thinkphp5와 thinkphp3의 비교 이 가이드는 버전 3.X를 사용하는 개발자가 이전 프로젝트를 5.0으로 업그레이드하기 위한 것입니다. 이 새 버전에 더 빨리 익숙해지고 시작할 수 있습니다. 동시에, 5.0은 완전히 새로운 파괴적이고 재구성된 버전이기 때문에 개발자가 기존 사고 패턴을 버릴 것을 강력히 권장합니다.

3. 엄격하게 말하면 'get'을 통해 'id'를 얻을 수 있는 /id/1과 같은 메소드가 개발자에게 잘못된 지침을 제공한 것에 대해 사과드립니다. , 이러한 URL은 $_GET에 속하지 않으며 이제 'param'을 통해 얻을 수 있습니다.

모델 변경

모델 쿼리의 새 버전은 기본 '객체'를 반환하고 시스템은 다음과 같이 'toArray' 메서드를 추가합니다. 많은 개발자들이 'all' 또는 'select'를 사용하여 배열로 변환하려고 합니다. 개발자가 '객체'의 개념을 이해하고 데이터 용도로 '객체'를 사용해 보길 바랍니다. db' 메소드를 사용하여 'toArray'를 남용하는 일부 개발자에게 'all' 또는 'select'의 결과는 'toArray'를 사용하여 변환할 수 없는 객체의 배열 컬렉션임을 상기시킵니다.

새 버전 변경

명명 규칙

# 🎜 🎜# 디렉터리 및 파일 이름은 '소문자 + 밑줄'을 사용하고 소문자로 시작합니다. 클래스 라이브러리와 함수 파일에는 .php라는 접미사가 붙습니다. 클래스 파일 이름은 네임스페이스와 클래스 라이브러리 파일에 대한 경로로 정의됩니다. 경로는 동일합니다(대문자 및 소문자 포함). 클래스 이름과 클래스 파일 이름은 일관되며 카멜 표기법을 사용하여 이름이 지정됩니다(첫 번째 문자는 대문자로 표시됨) Function#🎜 🎜#

# 🎜🎜#시스템은 더 이상 어떤 기능에도 의존하지 않으며 일반적으로 사용되는 작업 패키지에 대한 도우미 기능만 제공합니다. 단일 문자 기능은 포기되고 시스템은 기본적으로 도우미 기능을 로드합니다.

Routing

5.0 URL 액세스는 더 이상 일반 URL 패턴을 지원하지 않으며 라우팅은 일반 경로 정의를 지원하지 않지만 모두 규칙으로 변경됩니다. 라우팅이 변수 규칙(일반 정의)과 협력하는 방식은 여기서 자세히 설명하지 않습니다.

Controller

컨트롤러의 네임스페이스가 조정되었으므로 컨트롤러 클래스를 상속할 필요가 없습니다.

애플리케이션 클래스 라이브러리의 네임스페이스는 모듈 이름 대신 앱(수정 가능)으로 통합됩니다. 컨트롤러의 클래스 이름에는 기본적으로 Controller 접미사가 없습니다. 컨트롤러 클래스 접미사를 활성화합니다. 컨트롤러 작업 방법은 직접 출력 대신 데이터를 반환하는 방법을 사용합니다. 장치 쓰기 방법

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller 
{    public function hello()
    {        echo &#39;hello,thinkphp!&#39;;
    }
}

5.0 버전 컨트롤러 쓰기 방법

namespace app\index\controller;
class Index
{    public function index()
    {        return &#39;hello,thinkphp!&#39;;
    }
}
3.2 버전 컨트롤러 이름 지정
IndexController.class.php
5.0 버전 컨트롤러 이름 지정
Index.php
# 🎜🎜#

컨트롤러의 올바른 출력 템플릿

# 🎜🎜#

5.0在控制器中输出模板,使用方法如下:

如果你继承think\Controller的话,可以使用:

return $this->fetch(&#39;index/hello&#39;);

如果你的控制器没有继承 think\Controller的话,使用:

return view(&#39;index/hello&#39;);

模型

如果非要对比与旧版本的改进,模型被分为数据库、模型、验证器三部分,分别对应M方法、模型、自动验证,同时均有所加强,下面做简单介绍。

数据库

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

M(&#39;User&#39;)->where([&#39;name&#39;=>&#39;thinkphp&#39;])->find();

5.0版本

db(&#39;User&#39;)->where(&#39;name&#39;,&#39;thinkphp&#39;)->find();

模型

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

User::get(1); 
User::all();
User::where(&#39;id&#39;,&#39;>&#39;,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里面进行获取

助手函数

5.0助手函数和3.2版本的单字母函数对比如下:

thinkphp3과 thinkphp5의 차이점

위 내용은 thinkphp3과 thinkphp5의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.