Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der M-Methode und der R-Methode der TP3-Funktion
In diesem Artikel werden die M-Methode und die R-Methode der ThinkPHP3-Funktionen ausführlich vorgestellt. Die M-Methode wird zum Instanziieren einer grundlegenden Modellklasse verwendet, während die R-Methode zum Aufrufen der Operationsmethode eines bestimmten Controllers verwendet wird Startseite Lassen Sie uns gemeinsam lernen. Ich hoffe, es wird für alle hilfreich sein.
Zunächst werde ich Ihnen die detaillierte Erklärung der ThinkPHP-Funktionen vorstellen: M-Methode
Die M-Methode wird verwendet, um eine grundlegende Modellklasse zu instanziieren D-Methode ist:
1. Die Modellklasse muss nicht angepasst werden, wodurch die E/A-Belastung reduziert wird und die Leistung verbessert wird.
2 Standard ist die Model-Klasse. Sie können beim Instanziieren das Tabellenpräfix, die Datenbank und die Datenbankverbindungsinformationen angeben Da die Basismodellklasse der neuen Version des ThinkPHP-Frameworks jedoch immer leistungsfähiger wird, wird die M-Methode immer praktischer als die D-Methode.
M-Methodenaufrufformat:
M('[Basismodellname:] Modellname', 'Datentabellenpräfix', 'Datenbankverbindungsinformationen')
1. Instanziieren Sie die Basismodellklasse (Model)
Wenn kein Modell definiert ist, wenden wir uns an Sie Sie können die folgende Methode verwenden, um eine Modellklasse für den Betrieb zu instanziieren:Diese Methode ist die einfachste und effizienteste, da keine Modellklasse definiert werden muss und daher projektübergreifende Aufrufe unterstützt. 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.
entspricht tatsächlich://实例化User模型 $User = M('User'); //执行其他的数据操作 $User->select();
$User = M('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.
$User = new Model('User');2. Andere öffentliche Modellklassen instanziieren
Die Verwendung entspricht tatsächlich:
$User = M('CommonModel:User');Da die Modellklassen des Systems automatisch geladen werden können, müssen wir sie vor dem Import der Instanziierungsbibliothek nicht manuell klassifizieren Betrieb. 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.
$User = new CommonModel('User');3. Eingehendes Tabellenpräfix, Datenbank und andere Informationen
bedeutet die Instanziierung der Model-Modellklasse und den Betrieb der think_user-Tabelle in der db2-Datenbank.
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('db2.User','think_');
bedeutet, die Model-Modellklasse zu instanziieren und die Benutzertabelle in der Datenbank db1 zu betreiben.
$User = M('db1.User',null);
Verwenden Sie Model, um die grundlegende Modellklasse darzustellen , und verwenden Sie dann Model für die think_user-Tabelle. Zum Betrieb verwenden Sie das user_a-Konto, um eine Verbindung zur Datenbank herzustellen. Die Betriebsdatenbank ist thinkphp.
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
Wenn Sie beispielsweise Folgendes konfigurieren:
in der Projektkonfigurationsdatei, können Sie Folgendes verwenden:
'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';Die grundlegende Modellklasse und Datenbank können zusammen verwendet werden, zum Beispiel:
$User = M('User','think_','DB_CONFIG');Wenn Sie ein hierarchisches Modell mithilfe der öffentlichen Modellklasse instanziieren möchten, können wir Folgendes verwenden:
$User = M('CommonModel:db2.User','think_');um UserLogic zu instanziieren, obwohl dies wenig Sinn macht, da die gleiche Funktion mit
M('UserLogic:User');erreicht werden kann.
D('User','Logic');Detaillierte Erläuterung der ThinkPHP-Funktionen: R-Methode
R-Methodenaufrufformat:
R('[Project://][Group/]Module/Operation','Parameter','Controller-Layer-Name')Wenn wir beispielsweise eine Operationsmethode wie folgt definieren:
, dann kann diese Operationsmethode in anderen Controllern über R-Methoden aufgerufen werden (im Allgemeinen werden R-Methoden für modulübergreifende Aufrufe verwendet)
$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方法的调用方式。
相关推荐:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der M-Methode und der R-Methode der TP3-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!