ThinkPHP ist ein schnelles, kompatibles und einfaches, leichtes PHP-Entwicklungsframework. Die Verwendung von ThinkPHP-Framework kann unseren Entwicklungsprozess erheblich vereinfachen. Dieser Artikel richtet sich an PHP-Chinesisch und soll jedem helfen, ein sehr wichtiges Konzept in ThinkPHP zu erlernen: Namespace .
ThinkPHP übernimmt die Namespace-Definition und das automatische Laden von Klassenbibliotheksdateien und löst so effektiv das Problem mehrerer Module und des Composer-Namespace Konflikte zwischen Klassenbibliotheken werden gelöst und ein effizienterer automatischer Lademechanismus für Klassenbibliotheken implementiert.
Sie können zu unserem PHP-Chinesisch-Website-Kurs wechseln: Lernen Sie das PHP-Programmier-Namespace-Tutorial an Ihren Fingerspitzen
Unsere PHP-Chinesisch-Website Verwandte Es werden auch Videokurse angeboten: Dugu Jiujian (5)_ThinkPHP5 Video-Tutorial
Da Funktionen in der PHP-Syntax Überladung nicht unterstützt werden Was passiert, wenn es in einer Anwendung zwei Methoden mit demselben Namen gibt? Um Probleme durch wiederholte Namen zu vermeiden, steht im Yii-Framework vor allen Klassen das Wort C, und das Konzept von Namespaces wurde in ThinkPHP eingeführt. Es gibt ein paar Punkte, die besondere Aufmerksamkeit erfordern:
a) Der Namespace ist ein virtueller Definitionsraum, kein reales Verzeichnis
b) Die Trennzeichen des Namespace sind alle Backslashes
c) Namespace ist nur für Funktionen, Klassen und Konstanten (konstantdefinierte Konstanten, nicht definierte Konstanten) gültig.
d) Es gibt drei Zugriffsmethoden auf den Namensraum: unqualifizierte Namenszugriffsmethode; vollständig qualifizierte Namenszugriffsmethode;
Das Folgende wird nacheinander ausführlich erläutert.
1. Namespace ist nur für Funktionen, Klassen und Konstanten gültig (konstantdefinierte Konstanten, nicht definierte Konstanten).
Hier deklarieren wir zwei Namensräume space1 und space2 , es gibt Funktion getmsg() mit demselben Namen, Konstante a mit demselben Namen und Klasse Animal mit demselben Namen unter den beiden Namespaces, da sie sich in unterschiedlichen Namespaces befinden, treten keine Fehler auf. Wir öffnen es im Browser und erhalten folgende Ausgabe: helloworld.
Was passiert, wenn wir versuchen, mithilfe von define zwei Konstanten mit demselben Namen zu definieren?
Beim Öffnen im Browser wird folgender Fehler gemeldet:
Der Namespace ist also nur für Funktionen, Klassen und Konstanten (durch Konstante definierte Konstanten, nicht durch Definition definierte Konstanten) gültig.
Die oben deklarierten Namespaces space1 und space2 sind beide einstufige Namespaces , ein Namespace in der Form space1space2space3 ist ein mehrstufiger Namespace und das Trennzeichen ist. Im Folgenden werden drei Namespace-Zugriffsmethoden vorgestellt:
Beim Zugriff mit unqualifiziertem Namenszugriff wird auf die Funktionen unter dem aktuellen Namespace zugegriffen (dasselbe gilt für Klassen und Konstanten), sodass das Ausgabeergebnis des obigen Codes lautet: Welt.
Wenn Sie auf die Methode getmsg() unter name1space1 im Namespace name2space2 zugreifen möchten, können Sie dies tun Verwenden Sie den vollständig qualifizierten Namenszugriff (entspricht dem absoluten Pfadzugriff).
Die Ausgabe des obigen Codes lautet also: Hallo.
Der Unterschied zwischen der qualifizierten Namenszugriffsmethode und der vollständig qualifizierten Namenszugriffsmethode liegt nur bei Front. Wenn im obigen Beispiel qualifizierter Namenszugriff verwendet wird, ändern Sie die letzte Zeile in: name1space1getmsg();
Zu diesem Zeitpunkt öffnen wir es im Browser und finden den folgenden Fehler:
Zeigt an, dass wir die Funktion getmsg() unter dem Namespace name2space2name1space1 nicht finden können. Der Grund dafür ist, dass die qualifizierte Namenszugriffsmethode dem relativen Pfadzugriff entspricht. Wir verwenden die qualifizierte Namenszugriffsmethode im aktuellen Namespace, um auf Folgendes zuzugreifen: name1space1getmsg(), das nach der Funktion getmsg() sucht name1space1 im aktuellen Namespace. Wenn es nicht gefunden werden kann, wird ein Fehler gemeldet. Wenn wir daher einen anderen Namespace mit dem Namen name2space2name1space1 deklarieren, kann der obige Zugriff wie folgt normal ausgeführt werden:
Das Ausgabeergebnis lautet: hello-world.
Anhand des obigen Beispiels können wir erkennen, dass wir, wenn wir Funktionen, Konstanten oder Klassenelemente in einem anderen Namespace im aktuellen Namespace verwenden möchten, einen vollständig qualifizierten Zugriff verwenden müssen, um auf Code zuzugreifen und ihn zu schreiben. Dies ist daher relativ umständlich Wir können einen Namespace einführen und dann den qualifizierten Namenszugriff verwenden, um den Zugriffsprozess zu vereinfachen.
Das Ausgabeergebnis ist: HalloHund
Verwenden Sie ähnlich wie bei der Einführung von Namespaces das Schlüsselwort use, um räumliche Elemente einzuführen, und verwenden Sie dann einfach den unqualifizierten Zugriff . Eine Klasse mit demselben Namen wie die eingeführte Klasse darf jedoch nicht im aktuellen Namespace existieren, da sonst ein Fehler auftritt.
Das Ausgabeergebnis ist: Hunde-Rhabarber.
Wenn wir nicht das Schlüsselwort namespace verwenden, um einen Namespace zu deklarieren, gehört er dazu der öffentliche Raum.
Hier erstellen wir zwei PHP-Dateien, 1.php und 2.php, 1.php-Namespace ist name1space1, 2.php ist der öffentliche Raum.
1.php:
namespace name1\space1; header("content-type:text/html;charset=utf-8"); class Animal { public $obj = 'dog'; static $name = '大黄'; } function getmsg() { echo 'hello'; } const MN = 123; //在命名空间中引入公共命名空间 include ('./2.php'); getmsg(); //访问的是当前空间下的getmsg()函数 echo '</br>'; \getmsg(); //访问的是公共命名空间(即2.php文件)下的getmsg()函数 echo '</br>'; echo MN; //会先在当前命名空间下寻找MN常量,如果找到就输出,如果找不到,就会去公共命名空间寻找MN常量 echo '</br>'; echo \MN; //访问的是公共命名空间(即2.php文件)下的MN常量
2.php:
//没有指定命名空间,则其属于公共命名空间 function getmsg() { echo 'world'; } const MN = '456';
im Browser Öffnen 1.php, das Ausgabeergebnis ist:
hello
world
123
456
In thinkphp5.0 ist der Namespace ein virtueller Definitionsraum, kein reales Verzeichnis. Es ist nur so, dass bei der offiziellen Deklaration des Namespace der Name des Namespace bewusst der Verzeichnisstruktur entspricht.
Zum Beispiel öffnen wir die Datei Index.php im Ordner application/index/controller. Ihr Namespace lautet: appindexcontroller. ist in der Verzeichnisstruktur nicht vorhanden.
Namespace-Alias
Mit dem Framework können Sie beispielsweise Aliase für Namespaces definieren :
namespace app\index\model; use think\Model; class User extends Model { }
Die ursprüngliche Aufrufmethode im Controller lautet:
namespace app\index\controller; use app\index\model\User; class Index { public function index() { $user = new User(); } }
Wenn wir den Namespace-Alias in der öffentlichen Datei der Anwendung wie folgt registrieren:
\think\Loader::addNamespaceAlias('model','app\index\model');
Dann kann der obige Controller-Code geändert werden in:
namespace app\index\controller; use model\User; class Index { public function index() { $user = new User(); } }
相关资料推荐: