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

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

WBOY
WBOYOriginal
2016-07-29 09:15:50737Durchsuche

Die M-Methode wird zum Instanziieren einer Basismodellklasse verwendet. Der Unterschied zur D-Methode besteht darin, dass die Modellklasse nicht angepasst werden muss, wodurch die E/A-Belastung reduziert wird und die Leistung verbessert wird , Kann nur Methoden in der Basismodellklasse aufrufen (Standard ist die Modellklasse);
3 Sie können beim Instanziieren das Tabellenpräfix, die Datenbank und die Datenbankverbindungsinformationen angeben in der Kapselung Wie leistungsfähig ist die benutzerdefinierte Modellklasse? Da die Basismodellklasse der neuen Version des ThinkPHP-Frameworks jedoch immer leistungsfähiger wird, wird die M-Methode immer praktischer als die D-Methode.
Das Aufrufformat der M-Methode:
M('[Basismodellname:]Modellname','Datentabellenpräfix','Datenbankverbindungsinformationen')
Werfen wir einen Blick auf die spezifischen Verwendungszwecke der M-Methode:
1. Instanziieren Sie die Basismodellklasse (Modell)

Wenn kein Modell definiert ist, können wir die folgende Methode verwenden, um eine Modellklasse für den Betrieb zu instanziieren:

Diese Methode ist die einfachste und effizienteste, da keine Modellklassen definiert werden müssen und daher projektübergreifende Aufrufe unterstützt werden. 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模型
$User = M('User');
//执行其他的数据操作
$User->select();

entspricht tatsächlich:

$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 im Kleinbuchstabenformat vorliegt.

$User = new Model('User');

2. Andere öffentliche Modellklassen instanziieren

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

Die Verwendung entspricht tatsächlich:

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

Da die Modellklassen des Systems automatisch geladen werden können, müssen wir die Klassenbibliothek vor der Instanziierung nicht manuell importieren. 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

Der erste Parameter ist der Modellname (kann grundlegende Modellklassen und Datenbanken umfassen). Die beiden Parameter werden verwendet, um das Präfix der Datentabelle festzulegen (lassen Sie es leer, um das Tabellenpräfix der aktuellen Projektkonfiguration zu übernehmen), und der dritte Parameter wird verwendet, um die aktuell verwendeten Datenbankverbindungsinformationen festzulegen (lassen Sie es leer, um es zu übernehmen). Die Datenbankverbindungsinformationen der aktuellen Projektkonfiguration. Beispiel:

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_');


gibt die Modellklasse des Instanziierungsmodells an und betreibt die Benutzertabelle in der Datenbank db1.

Wenn die von Ihnen betriebene Datenbank unterschiedliche Benutzerkonten erfordert, können Sie beispielsweise die Verbindungsinformationen der Datenbank übergeben:
$User = M('db1.User',null);


stellt die grundlegende Modellklasse mithilfe von Model dar und verwendet dann das Konto user_a um die think_user-Tabelle zu bedienen. Um eine Verbindung zur Datenbank herzustellen, ist thinkphp die Betriebsdatenbank.

Der dritte Verbindungsinformationsparameter kann die DSN-Konfiguration oder Array-Konfiguration verwenden und sogar Konfigurationsparameter unterstützen.
$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 Basismodellklasse und die Datenbank können zusammen verwendet werden, z 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 nicht viel Sinn macht , weil Sie mit

M('UserLogic:User');

die gleiche Funktion erreichen können.

D('User','Logic');
Das Obige führt die detaillierte Erklärung der ThinkPHP-Funktionen ein: M-Methode, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

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