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

thinkphp3과 thinkphp5의 차이점

Jun 19, 2019 pm 03:43 PM
thinkphp5 차이점

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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어에서 Char와 WCHAR_T의 차이 C 언어에서 Char와 WCHAR_T의 차이 Apr 03, 2025 pm 03:09 PM

C 언어에서 char와 wchar_t의 주요 차이점은 문자 인코딩입니다. char ascii를 사용하거나 ascii를 확장하고, wchar_t는 유니 코드를 사용합니다. Char는 1-2 바이트를 차지하고 WCHAR_T는 2-4 바이트를 차지합니다. Char는 영어 텍스트에 적합하며 WCHAR_T는 다국어 텍스트에 적합합니다. Char_t는 널리 지원되며, 컴파일러 및 운영 체제가 유니 코드를 지원하는지 여부에 따라 다릅니다. Char는 문자 범위가 제한되며 WCHAR_T는 더 큰 문자 범위를 가지며 특수 함수는 산술 작업에 사용됩니다.

멀티 스레딩과 비동기 C#의 차이 멀티 스레딩과 비동기 C#의 차이 Apr 03, 2025 pm 02:57 PM

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

C 언어 합계의 기능은 무엇입니까? C 언어 합계의 기능은 무엇입니까? Apr 03, 2025 pm 02:21 PM

C 언어에는 내장 합계 기능이 없으므로 직접 작성해야합니다. 합계는 배열 및 축적 요소를 가로 질러 달성 할 수 있습니다. 루프 버전 : 루프 및 배열 길이를 사용하여 계산됩니다. 포인터 버전 : 포인터를 사용하여 배열 요소를 가리키며 효율적인 합계는 자체 증가 포인터를 통해 달성됩니다. 동적으로 배열 버전을 할당 : 배열을 동적으로 할당하고 메모리를 직접 관리하여 메모리 누출을 방지하기 위해 할당 된 메모리가 해제되도록합니다.

숯과 서명되지 않은 숯의 차이점은 무엇입니까? 숯과 서명되지 않은 숯의 차이점은 무엇입니까? Apr 03, 2025 pm 03:36 PM

Char 및 Unsigned Char는 문자 데이터를 저장하는 두 가지 데이터 유형입니다. 주요 차이점은 음수 및 양수를 다루는 방법입니다. 음수 처리 : char는 부정확 한 char가 할 수없고 음수를 저장할 수 있습니다. 비트 모드 : char 가장 높은 비트는 기호, 부호없는 문자 부호 비트를 나타냅니다. 산술 연산 : char and signed char는 서명하고 서명되지 않은 유형이며, 산술 작업은 다릅니다. 호환성 : 문자와 서명되지 않은 숯

C 언어 기능의 기본 요구 사항은 무엇입니까? C 언어 기능의 기본 요구 사항은 무엇입니까? Apr 03, 2025 pm 10:06 PM

C 언어 기능은 코드 모듈화 및 프로그램 구축의 기초입니다. 그들은 선언 (함수 헤더)과 정의 (기능 본문)로 구성됩니다. C 언어는 값을 사용하여 기본적으로 매개 변수를 전달하지만 주소 패스를 사용하여 외부 변수를 수정할 수도 있습니다. 함수는 반환 값을 가질 수 있거나 가질 수 있으며 반환 값 유형은 선언과 일치해야합니다. 기능 명명은 낙타 또는 밑줄을 사용하여 명확하고 이해하기 쉬워야합니다. 단일 책임 원칙을 따르고 기능 단순성을 유지하여 유지 관리 및 가독성을 향상시킵니다.

c 멀티 스레딩의 세 가지 구현 방법의 차이점은 무엇입니까? c 멀티 스레딩의 세 가지 구현 방법의 차이점은 무엇입니까? Apr 03, 2025 pm 03:03 PM

멀티 스레딩은 컴퓨터 프로그래밍에서 중요한 기술이며 프로그램 실행 효율성을 향상시키는 데 사용됩니다. C 언어에는 스레드 라이브러리, Posix 스레드 및 Windows API를 포함하여 멀티 스레딩을 구현하는 방법에는 여러 가지가 있습니다.

C 언어 기능의 개념 C 언어 기능의 개념 Apr 03, 2025 pm 10:09 PM

C 언어 기능은 재사용 가능한 코드 블록입니다. 입력, 작업을 수행하며 결과를 반환하여 모듈 식 재사성을 향상시키고 복잡성을 줄입니다. 기능의 내부 메커니즘에는 매개 변수 전달, 함수 실행 및 리턴 값이 포함됩니다. 전체 프로세스에는 기능이 인라인과 같은 최적화가 포함됩니다. 좋은 기능은 단일 책임, 소수의 매개 변수, 이름 지정 사양 및 오류 처리 원칙에 따라 작성됩니다. 함수와 결합 된 포인터는 외부 변수 값 수정과 같은보다 강력한 기능을 달성 할 수 있습니다. 함수 포인터는 함수를 매개 변수 또는 저장 주소로 전달하며 함수에 대한 동적 호출을 구현하는 데 사용됩니다. 기능 기능과 기술을 이해하는 것은 효율적이고 유지 가능하며 이해하기 쉬운 C 프로그램을 작성하는 데 핵심입니다.

H5와 미니 프로그램과 앱의 차이점 H5와 미니 프로그램과 앱의 차이점 Apr 06, 2025 am 10:42 AM

H5. 미니 프로그램과 앱의 주요 차이점은 다음과 같습니다. 기술 아키텍처 : H5는 웹 기술을 기반으로하며 미니 프로그램 및 앱은 독립적 인 응용 프로그램입니다. 경험과 기능 : H5는 가볍고 사용하기 쉽고 기능이 제한되어 있습니다. 미니 프로그램은 가벼우 며 상호성이 우수합니다. 앱은 강력하고 부드러운 경험이 있습니다. 호환성 : H5는 크로스 플랫폼 호환성이며 애플릿 및 앱은 플랫폼에 의해 제한됩니다. 개발 비용 : H5는 개발 비용이 낮고 중간 미니 프로그램 및 최고 앱이 있습니다. 적용 가능한 시나리오 : H5는 정보 표시에 적합하고 애플릿은 가벼운 응용 프로그램에 적합하며 앱은 복잡한 기능에 적합합니다.

See all articles