ホームページ バックエンド開発 PHPチュートリアル ThinkPHPの機能を詳しく解説:M法とR法

ThinkPHPの機能を詳しく解説:M法とR法

Jun 06, 2018 pm 03:20 PM

この記事では、ThinkPHP の関数の詳細な説明について主に M メソッドと R メソッドを紹介します。必要な友達に参考にしてください。 ThinkPHP 関数の詳細な説明: M メソッド

M メソッドは、基本的なモデル クラスをインスタンス化するために使用されます。 D メソッドとの違いは次のとおりです:

1. モデル クラスをカスタマイズする必要がなく、IO 負荷が軽減されます。パフォーマンス;

2. 基本モデル クラスのメソッドの後にのみ呼び出すことができます (デフォルトは Model クラスです)。
D メソッドの能力は、カプセル化するカスタム モデルに反映されますクラスがどれほど強力であっても、ThinkPHP フレームワークの新しいバージョンの基本モデル クラスがますます強力になるにつれて、M メソッドもますます強力になっていますD メソッドよりも実用的です。


Mメソッドの呼び出し形式:

M('[基本モデル名:]モデル名','データテーブルプレフィックス','データベース接続情報')

具体的な使い方を見てみましょう。 M メソッド:

1. 基本モデル (Model) クラスをインスタンス化します

モデルが定義されていない場合、次のメソッドを使用して操作用のモデル クラスをインスタンス化できます:

//实例化User模型
$User = M('User');
//执行其他的数据操作
$User->select();
ログイン後にコピー

このメソッドは最も単純で効率的です。モデル クラスを定義する必要がないため、プロジェクト間の呼び出しがサポートされます。また、カスタム モデル クラスがないため、関連するビジネス ロジックを作成できず、基本的な CURD 操作のみを完了できるという欠点もあります。

$User = M('User');
ログイン後にコピー

は実際には以下と同等です:

$User = new Model('User');
ログイン後にコピー

は think_user テーブルを操作することを意味します。 M メソッドも D メソッドと同様にシングルトン関数を持ち、複数回呼び出されても繰り返しインスタンス化されません。 M メソッドのモデル名パラメーターは、データ テーブルに変換されるときに自動的に小文字に変換されます。これは、ThinkPHP のデータ テーブルの命名仕様がすべて小文字の形式であることを意味します。

2. 他のパブリック モデル クラスをインスタンス化する

インスタンス化する最初の方法は、モデル クラスの定義がないため、いくつかの追加の論理メソッドをカプセル化することが困難ですが、ほとんどの場合、必要なのは次のとおりです。一般的なロジックを拡張した場合は、次の方法を試してください。

$User = M('CommonModel:User');
ログイン後にコピー

変更された使用法は、実際には次と同等です:

$User = new CommonModel('User');
ログイン後にコピー

システムのモデルクラスは自動的にロードできるため、インスタンス化の前にクラスライブラリを手動でインポートする必要はありません。モデル クラス CommonModel は Model を継承する必要があります。 CommonModel クラスでいくつかの共通の論理メソッドを定義できるため、プロジェクトに既に 100 を超えるデータ テーブルがある場合、そのほとんどは基本的なメソッドです。CURD 操作では、一部のモデルのみがこのメソッドを備えています。カプセル化する必要がある複雑なビジネス ロジックがあるため、最初の方法と 2 番目の方法を組み合わせるのが良い選択です。

3. テーブルのプレフィックス、データベース、その他の情報を渡します

M メソッドには 3 つのパラメーターがあり、最初のパラメーターはモデル名 (基本的なモデル クラスとデータベースを含むことができます) であり、2 番目のパラメーターは、データ テーブルのプレフィックス (現在のプロジェクト構成のテーブル プレフィックスを取得するには空白のままにします)。3 番目のパラメータは、現在使用されているデータベース接続情報を設定するために使用されます (現在のプロジェクト構成のデータベース接続情報を取得するには空白のままにします)。例:

$User = M('db2.User','think_');
ログイン後にコピー

Model モデル クラスをインスタンス化し、db2 データベース内の think_user テーブルを操作することを示します。

2 番目のパラメータが空白のままか渡されない場合は、現在のプロジェクト設定でデータ テーブル プレフィックスを使用することを意味します。操作されているデータ テーブルにテーブル プレフィックスがない場合は、次を使用できます。

$User = M('db1.User',null);
ログイン後にコピー

Model モデル クラスをインスタンス化し、db1 データベース内のユーザー テーブルを操作することを意味します。

操作するデータベースに別のユーザー アカウントが必要な場合は、データベース接続情報を渡すことができます。例:

$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
ログイン後にコピー

は、基本モデル クラスが Model を使用し、think_user テーブルを操作し、user_a を使用することを意味します。データベースに接続するアカウント、オペレーティング データベースは thinkphp です。

3 番目の接続情報パラメーターは、DSN 構成またはアレイ構成を使用でき、構成パラメーターをサポートすることもできます。

たとえば、プロジェクト構成ファイルで

'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';
ログイン後にコピー

を構成すると、次のように使用できます:

$User = M('User','think_','DB_CONFIG');
ログイン後にコピー

基本モデル クラスとデータベースを一緒に使用できます。例:

$User = M('CommonModel:db2.User','think_');
ログイン後にコピー

パブリック モデル クラスを使用して階層モデルをインスタンス化するには、

M('UserLogic:User');
ログイン後にコピー

を使用して UserLogic をインスタンス化できます。ただし、これはあまり意味がありません。

でも同じことが達成できるためです。

D('User','Logic');
ログイン後にコピー

機能。

ThinkPHPの機能詳細説明:Rメソッド

Rメソッドは、Aメソッドをさらに拡張・補足するもので、特定のコントローラーの操作メソッドを呼び出すために使用されます。方法Aの使用方法はこちらをご覧ください。

Rメソッド呼び出し形式:

R('[Project://][Group/]Module/Operation','Parameters','Controller Layer name')

例えば、オペレーションメソッドを次のように定義します:

りー

那么就可以通过R方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用)

$data = R('User/detail',array('5'));
ログイン後にコピー

表示调用User控制器的detail方法(detail方法必须是public类型),返回值就是查询id为5的一个用户数据。如果你要调用的操作方法是没有任何参数的话,第二个参数则可以留空,直接使用:

$data = R('User/detail');
ログイン後にコピー

也可以支持跨分组和项目调用,例如:

R('Admin/User/detail',array('5'));
ログイン後にコピー

表示调用Admin分组下面的User控制器的detail方法。

R('Admin://User/detail',array('5'));
ログイン後にコピー

表示调用Admin项目下面的User控制器的detail方法。

官方的建议是不要在同一层多太多调用,会引起逻辑的混乱,被公共调用的部分应该封装成单独的接口,可以借助3.1的新特性多层控制器,单独添加一个控制器层用于接口调用,例如,我们增加一个Api控制器层,

class UserApi extends Action {
 public function detail($id){
  return M('User')->find($id);
 }
 }
ログイン後にコピー

然后,使用R方法调用

$data = R('User/detail',array('5'),'Api');
ログイン後にコピー

也就是说,R方法的第三个参数支持指定调用的控制器层。

同时,R方法调用操作方法的时候可以支持操作后缀设置C('ACTION_SUFFIX'),如果你设置了操作方法后缀,仍然不需要更改R方法的调用方式。

以上内容给大家分享了ThinkPHP函数详解之M方法和R方法,希望对大家有所帮助。

相关推荐:

ThinkPHP之R方法实例

以上がThinkPHPの機能を詳しく解説:M法とR法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

See all articles