ホームページ  >  記事  >  バックエンド開発  >  ThinkPHPの機能を詳しく解説:M法とR法

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

不言
不言オリジナル
2018-06-06 15:20:441318ブラウズ

この記事では、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 までご連絡ください。