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
$this->display() => return view()/return $this->fetch();
$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('User');
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->create($data);
$User->add($data);//添加多条数据$dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');
$dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com')
$User->addAll($dataList);
//添加单条数据$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);//添加多条数据$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
$User = M("User"); // 实例化User对象// 要修改的数据对象属性赋值 $data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com'; $User->where('id=5')->save($data); // 根据条件更新记录 where('id=5')->setField('name','ThinkPHP'); $data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');// 更改用户的name值 $User-> where('id=5')->setField($data);更改用户的name和email的值 $User->where('id=5')->setDec('score',5); // 用户的积分减5 $User->where('id=5')->setInc('score',3); // 用户的积分加3
Db::table('think_user')->update(['name' => 'thinkphp','id'=>1]);//更新数据表中的数据 Db::table('think_user') ->where('id',1) ->setField('name', 'thinkphp');//更新某个字段的值 Db::table('think_user')->where('id', 1)->setInc('score',5);// score 字段加 5 Db::table('think_user')->where('id', 1)->setDec('score', 5);// score 字段减 5 Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);//支持延时更新
$User->delete('1,2,5'); // 删除主键为1,2和5的用户数据 $User->where('status=0')->delete(); // 删除所有状态为0的用户数据
// 根据主键删除Db::table('think_user')->delete(1); Db::table('think_user')->delete([1,2,3]);// 条件删除 Db::table('think_user')->where('id',1)->delete(); Db::table('think_user')->where('id','<',10)->delete();
3. 엄격하게 말하면 'get'을 통해 'id'를 얻을 수 있는 /id/1과 같은 메소드가 개발자에게 잘못된 지침을 제공한 것에 대해 사과드립니다. , 이러한 URL은 $_GET에 속하지 않으며 이제 'param'을 통해 얻을 수 있습니다.
모델 변경
새 버전 변경
# 🎜 🎜# 디렉터리 및 파일 이름은 '소문자 + 밑줄'을 사용하고 소문자로 시작합니다. 클래스 라이브러리와 함수 파일에는 .php라는 접미사가 붙습니다. 클래스 파일 이름은 네임스페이스와 클래스 라이브러리 파일에 대한 경로로 정의됩니다. 경로는 동일합니다(대문자 및 소문자 포함). 클래스 이름과 클래스 파일 이름은 일관되며 카멜 표기법을 사용하여 이름이 지정됩니다(첫 번째 문자는 대문자로 표시됨) Function#🎜 🎜#
# 🎜🎜#시스템은 더 이상 어떤 기능에도 의존하지 않으며 일반적으로 사용되는 작업 패키지에 대한 도우미 기능만 제공합니다. 단일 문자 기능은 포기되고 시스템은 기본적으로 도우미 기능을 로드합니다.Routing
5.0 URL 액세스는 더 이상 일반 URL 패턴을 지원하지 않으며 라우팅은 일반 경로 정의를 지원하지 않지만 모두 규칙으로 변경됩니다. 라우팅이 변수 규칙(일반 정의)과 협력하는 방식은 여기서 자세히 설명하지 않습니다.
Controller
컨트롤러의 네임스페이스가 조정되었으므로 컨트롤러 클래스를 상속할 필요가 없습니다.
애플리케이션 클래스 라이브러리의 네임스페이스는 모듈 이름 대신 앱(수정 가능)으로 통합됩니다. 컨트롤러의 클래스 이름에는 기본적으로 Controller 접미사가 없습니다. 컨트롤러 클래스 접미사를 활성화합니다. 컨트롤러 작업 방법은 직접 출력 대신 데이터를 반환하는 방법을 사용합니다. 장치 쓰기 방법<?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function hello() { echo 'hello,thinkphp!'; } }
namespace app\index\controller; class Index { public function index() { return 'hello,thinkphp!'; } }
IndexController.class.php
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里面进行获取
助手函数
5.0助手函数和3.2版本的单字母函数对比如下:
위 내용은 thinkphp3과 thinkphp5의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!