Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der ThinkPHP-Funktionen: M-Methode und R-Methode

Detaillierte Erläuterung der ThinkPHP-Funktionen: M-Methode und R-Methode

不言
不言Original
2018-06-06 15:20:441318Durchsuche

Dieser Artikel stellt hauptsächlich die M-Methode und die R-Methode zur detaillierten Erklärung der ThinkPHP-Funktionen vor. Jetzt kann ich ihn mit Ihnen teilen

Zunächst werde ich Ihnen die detaillierte Erklärung der ThinkPHP-Funktionen vorstellen: Die M-Methode wird zum Instanziieren einer grundlegenden Modellklasse verwendet. Der Unterschied zur D-Methode ist:

1. Es ist keine benutzerdefinierte Modellklasse erforderlich, wodurch die E/A-Belastung reduziert wird und die Leistung gut ist.

2. Nach der Instanziierung können nur Methoden in der Basismodellklasse aufgerufen werden ;

3. Sie können beim Instanziieren das Tabellenpräfix, die Datenbank und die Datenbankverbindungsinformationen angeben ist, aber mit der neuen Version der Basismodellklasse des ThinkPHP-Frameworks werden die Funktionen immer leistungsfähiger und die M-Methode ist immer praktischer als die D-Methode.

M-Methodenaufrufformat:

M('[Basismodellname:] Modellname', 'Datentabellenpräfix', 'Datenbankverbindungsinformationen')

Werfen wir einen Blick auf die spezifischen Verwendungszwecke der M-Methode:

1. Instanziieren Sie die Basismodellklasse (Model)

Wenn kein Modell definiert ist, wenden wir uns an Sie kann die folgende Methode verwenden, um eine Modellklasse für den Betrieb zu instanziieren:

//实例化User模型
$User = M('User');
//执行其他的数据操作
$User->select();

Diese Methode ist die einfachste und effizienteste, da keine Modellklasse definiert werden muss , also Unterstützung projektübergreifender Aufrufe. Der Nachteil besteht auch darin, dass es keine benutzerdefinierte Modellklasse gibt, sodass die entsprechende Geschäftslogik nicht geschrieben werden kann und nur grundlegende CURD-Operationen ausgeführt werden können.

$User = M('User');

entspricht eigentlich:

$User = new Model('User');

bedeutet, dass die think_user-Tabelle bedient wird. Die M-Methode verfügt ebenso wie die D-Methode über eine Singleton-Funktion und wird bei mehrmaligem Aufruf nicht wiederholt instanziiert. Der Modellnamensparameter der M-Methode wird bei der Konvertierung in eine Datentabelle automatisch in Kleinbuchstaben umgewandelt, was bedeutet, dass die Benennungsspezifikation für Datentabellen von ThinkPHP ausschließlich in Kleinbuchstaben vorliegt.

2. Andere öffentliche Modellklassen instanziieren

Die erste Möglichkeit zur Instanziierung besteht darin, dass es keine Definition der Modellklasse gibt, sodass es schwierig ist, zusätzliche Logik zu kapseln Methoden, aber in den meisten Fällen müssen Sie möglicherweise nur eine allgemeine Logik erweitern, dann können Sie die folgende Methode ausprobieren.

$User = M('CommonModel:User');

Die Verwendung entspricht tatsächlich:

$User = new CommonModel('User');

aufgrund des Systemmodells Klassen können automatisch geladen werden, sodass wir die Klassenbibliothek vor der Instanziierung nicht manuell importieren müssen. Die Modellklasse CommonModel muss Model erben. Wir können einige allgemeine logische Methoden in der CommonModel-Klasse definieren, wodurch die Notwendigkeit entfällt, für jede Datentabelle spezifische Modellklassen zu definieren. Wenn Ihr Projekt bereits über mehr als 100 Datentabellen verfügt, sind die meisten davon grundlegend. Für CURD-Operationen sind dies nur einige Modelle Da es sich um eine komplexe Geschäftslogik handelt, die gekapselt werden muss, ist die Kombination der ersten Methode und der zweiten Methode eine gute Wahl.

3. Eingehendes Tabellenpräfix, Datenbank und andere Informationen

Der erste Parameter ist der Modellname (kann die Basismodellklasse enthalten). Datenbank), der zweite Parameter wird verwendet, um das Präfix der Datentabelle festzulegen (leer lassen, um das Tabellenpräfix der aktuellen Projektkonfiguration zu übernehmen), und der dritte Parameter wird verwendet, um die aktuell verwendeten Datenbankverbindungsinformationen festzulegen (leer lassen). Nehmen Sie die Datenbankverbindung der aktuellen Projektkonfigurationsinformationen), zum Beispiel:

$User = M('db2.User','think_');

bedeutet, die Model-Modellklasse zu instanziieren und die think_user-Tabelle in der db2-Datenbank zu betreiben .

Wenn der zweite Parameter leer bleibt oder nicht übergeben wird, bedeutet dies, dass das Datentabellenpräfix in der aktuellen Projektkonfiguration verwendet wird. Wenn die betriebene Datentabelle kein Tabellenpräfix hat, können Sie Folgendes verwenden:

$User = M('db1.User',null);

bedeutet, die Model-Modellklasse zu instanziieren und die Benutzertabelle in der Datenbank db1 zu betreiben.

Wenn die von Ihnen betriebene Datenbank unterschiedliche Benutzerkonten erfordert, können Sie die Datenbankverbindungsinformationen übergeben, zum Beispiel:

$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');

stellt die Basis dar Modellklasse Verwenden Sie Model, bedienen Sie dann die Tabelle think_user, stellen Sie mit dem Konto user_a eine Verbindung zur Datenbank her und die Betriebsdatenbank ist thinkphp.

Der dritte Verbindungsinformationsparameter kann die DSN-Konfiguration oder Array-Konfiguration verwenden und sogar Konfigurationsparameter unterstützen.

Wenn Sie beispielsweise Folgendes konfigurieren:

'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';

in der Projektkonfigurationsdatei, können Sie Folgendes verwenden:

$User = M('User','think_','DB_CONFIG');

Grundlegende Modellklassen und Datenbanken können zusammen verwendet werden, zum Beispiel:

$User = M('CommonModel:db2.User','think_');

Wenn Sie eine Hierarchie instanziieren möchten Modell, verwenden Sie die Klassenmethode des öffentlichen Modells. Wir können Folgendes verwenden:

M('UserLogic:User');

, um UserLogic zu instanziieren, obwohl dies nicht viel Sinn macht, da Sie

D('User','Logic');

erreicht die gleiche Funktion.

Ausführliche Erläuterung der ThinkPHP-Funktionen: R-Methode

Die R-Methode wird verwendet, um die Betriebsmethode eines bestimmten Controllers aufzurufen, was eine weitere Verbesserung und Ergänzung des darstellt Eine Methode. Informationen zur Verwendung von Methode A finden Sie hier.

R-Methodenaufrufformat: R('[Project://][Group/]Module/Operation','Parameter','Controller-Layer-Name')

Zum Beispiel definieren wir eine Operationsmethode als:

class UserAction extends Action {
 public function detail($id){
  return M('User')->find($id);
 }
 }

那么就可以通过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方法实例

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der ThinkPHP-Funktionen: M-Methode und R-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn