検索

thinkphp3 と thinkphp5 の違い

# thinkphp3 と thinkphp5 の違いは何ですか?

#1. thinkphp3.2 と thinkphp5 の使用法の違い

1. 過去の 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 => User

② モデルからサフィックス モデルを削除します: UserModel => User

5. URL アクセス:

コントローラー名にキャメルケースが使用されている場合は、アクセスする前に各文字をアンダースコアでリンクする必要があります。

例: コントローラー名は AddUser で、アクセスは add_user を使用して行われます

6. TP5 では、二次パラメーター (つまり 2 次元配列) の構成をサポートしています。セカンダリ構成パラメータの読み取り:

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

②config('user.type');

7. テンプレートは 3 つをサポートします。メタオペレーターの操作:

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

関連する推奨事項: "

php ビデオ チュートリアル

"

8. TP5 組み込みタグ: システムの組み込みタグ、volist、switch、if、elseif、else、foreach、compare (すべての比較タグを含む)、存在する (ない)、空の (ない)、定義された (ない) など。

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 = validate('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>

2 番目、比較のための 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();

3 番目に、thinkphp5 と thinkphp3 の比較。.X バージョンの開発者は、この新しいバージョンに慣れ、より早く使い始めることができます。同時に、5.0 はまったく新しい破壊的で再構築されたバージョンであるため、開発者には古い思考パターンを放棄することも強くお勧めします。

3 の古い考えです。間違った案内で申し訳ありません。バージョン 5.0 では、get によって id を取得できる /id/1 のようなメソッドは正式に廃止されました。厳密には、このようなURL は $_GET に属していません。「param」Obtain を通じて取得できるようになりました。 モデルの変更点

モデル クエリの新しいバージョンはデフォルトの 'object' を返し、システムはデフォルトで 'toArray' メソッドを追加します。多くの開発者は ' all' または 'select' 'toArray' を使用して配列に変換してみてください。開発者が 'object' の概念を理解し、'object' を使用してデータを使用したり、'db' メソッドを使用して操作したりできることを願っています。 「toArray」を悪用する開発者にとって、「all」または「select」の結果はオブジェクトの配列コレクションとなり、「toArray」を使用して変換することはできません。

#新しいバージョンの変更点

命名規則

ディレクトリ名とファイル名には「小文字のアンダースコア」が使用されます, また、小文字で始まります。クラス ライブラリと関数ファイルの接尾辞は一律に .php です。クラス ファイル名は名前空間で定義され、名前空間のパスはクラス ライブラリ ファイルのパスと一致しています (大文字と小文字を含む)。 ); クラス名とクラス ファイル 名前は一貫している必要があり、キャメル ケースの名前付けを均一に使用する必要があります (最初の文字は大文字になります)

関数

システムは依存しなくなりました。あらゆる関数で使用できますが、一般的に使用される操作のカプセル化関数のアシスタントのみを提供します。単一文字関数は廃止され、システムはデフォルトでヘルパー関数をロードします。 ルーティング

5.0 URL アクセスは通常の URL モードをサポートしなくなり、ルーティングは通常のルーティング定義をサポートしなくなります。代わりに、すべてが可変ルール (通常の定義)、具体的な詳細についてはここでは繰り返しません。

Controller

コントローラーの名前空間は調整されており、コントローラー クラスを継承する必要はありません。

アプリケーション クラス ライブラリの名前空間は、モジュール名ではなく app (変更可能) として統合されます。コントローラーのクラス名には、デフォルトではコントローラー サフィックスがありません。コントローラーを有効にするために、controller_suffix パラメーターを構成できます。クラスサフィックス; コントローラの操作メソッド データを直接出力する代わりに return メソッドを使用する; 元々の操作前メソッドと操作後メソッドを廃止;

バージョン比較

3.2 バージョン コントローラの記述方法

<?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 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
ThinkPHPの組み込みテストフレームワークの主な機能は何ですか?ThinkPHPの組み込みテストフレームワークの主な機能は何ですか?Mar 18, 2025 pm 05:01 PM

この記事では、ThinkPHPの組み込みテストフレームワークについて説明し、ユニットや統合テストなどの主要な機能と、早期のバグ検出とコード品質の向上を通じてアプリケーションの信頼性を高める方法について強調しています。

リアルタイムの株式市場データフィードを構築するためにThinkPhpを使用する方法は?リアルタイムの株式市場データフィードを構築するためにThinkPhpを使用する方法は?Mar 18, 2025 pm 04:57 PM

記事では、リアルタイムの株式市場データフィードにThinkPhpを使用して、セットアップ、データの正確性、最適化、セキュリティ対策に焦点を当てて説明します。

サーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項は何ですか?サーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項は何ですか?Mar 18, 2025 pm 04:54 PM

この記事では、パフォーマンスの最適化、ステートレス設計、セキュリティに焦点を当てたサーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項について説明します。コスト効率やスケーラビリティなどの利点を強調しますが、課題にも対処します

ThinkPhpマイクロサービスでサービスの発見と負荷分散を実装する方法は?ThinkPhpマイクロサービスでサービスの発見と負荷分散を実装する方法は?Mar 18, 2025 pm 04:51 PM

この記事では、セットアップ、ベストプラクティス、統合方法、および推奨ツールに焦点を当てたThinkPhpマイクロサービスにサービスの発見と負荷分散の実装について説明します。[159文字]。

ThinkPhpの依存関係噴射コンテナの高度な機能は何ですか?ThinkPhpの依存関係噴射コンテナの高度な機能は何ですか?Mar 18, 2025 pm 04:50 PM

ThinkPHPのIOCコンテナは、PHPアプリで効率的な依存関係管理のための怠zyなロード、コンテキストバインディング、メソッドインジェクションなどの高度な機能を提供します。

リアルタイムのコラボレーションツールを構築するためにThinkPhpを使用する方法は?リアルタイムのコラボレーションツールを構築するためにThinkPhpを使用する方法は?Mar 18, 2025 pm 04:49 PM

この記事では、ThinkPhpを使用してリアルタイムのコラボレーションツールを構築し、セットアップ、Websocket統合、セキュリティベストプラクティスに焦点を当てて説明します。

SaaSアプリケーションを構築するためにThinkPhpを使用することの主な利点は何ですか?SaaSアプリケーションを構築するためにThinkPhpを使用することの主な利点は何ですか?Mar 18, 2025 pm 04:46 PM

ThinkPhpは、軽量のデザイン、MVCアーキテクチャ、および拡張性を備えたSaaSアプリに利益をもたらします。スケーラビリティを向上させ、開発を速め、さまざまな機能を通じてセキュリティを改善します。

ThinkPhpとRabbitmqを使用して分散タスクキューシステムを構築する方法は?ThinkPhpとRabbitmqを使用して分散タスクキューシステムを構築する方法は?Mar 18, 2025 pm 04:45 PM

この記事では、ThinkPhpとRabbitMQを使用して分散タスクキューシステムの構築を概説し、インストール、構成、タスク管理、およびスケーラビリティに焦点を当てています。重要な問題には、Immedのような一般的な落とし穴を避けるための高可用性の確保が含まれます

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール