Heim > Artikel > Backend-Entwicklung > Einführung in PHP-Namespaces
In diesem Artikel wird hauptsächlich der PHP-Namespace vorgestellt, der einen bestimmten Referenzwert hat. Jetzt können Freunde in Not darauf verweisen
Was ist ein Namespace? Im Großen und Ganzen ist ein Namespace eine Möglichkeit, Dinge zu kapseln. Diese Abstraktion ist an vielen Stellen zu finden. Beispielsweise werden Verzeichnisse in Betriebssystemen verwendet, um zusammengehörige Dateien zu gruppieren, und sie fungieren als Namespaces für die Dateien im Verzeichnis. Beispielsweise kann die Datei
foo.txtgleichzeitig in den Verzeichnissen /home/greg und /home/other vorhanden sein, jedoch nicht im selben Verzeichnis. Es gibt zwei foo.txt-Dateien. Wenn wir außerdem auf die Datei foo.txt außerhalb des Verzeichnisses /home/greg zugreifen, müssen wir den Verzeichnisnamen und das Verzeichnistrennzeichen vor den Dateinamen setzen, um /home zu erhalten /greg /foo.txt. Die Anwendung dieses Prinzips auf den Bereich der Programmierung ist das Konzept des Namespace. In PHP werden Namespaces verwendet, um zwei Arten von Problemen zu lösen, die beim Erstellen von wiederverwendbarem Code wie Klassen oder Funktionen beim Schreiben von Klassenbibliotheken oder Anwendungen auftreten:
wird mit dem Schlüsselwort
namespacedeklariert. Wenn eine Datei einen Namensraum enthält, muss sie den Namensraum vor allen anderen Codes deklarieren, außer einem: dem Schlüsselwort „declare“. Der einzige zulässige Code vor der Deklaration eines Namespace ist die
declare-Anweisung, die die Kodierung der Quelldatei definiert. Darüber hinaus kann der gesamte Nicht-PHP-Code, einschließlich Leerzeichen, nicht vor der Namespace-Deklaration erscheinen: <html>
<?php
namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句?>
Darüber hinaus kann im Gegensatz zu anderen Sprachfunktionen von PHP derselbe Namespace in mehreren Dateien definiert werden, was das Teilen ermöglicht Inhalte desselben Namensraums speichern und in verschiedenen Dateien speichern.
1.
Beispiel 1 Zuerst erstellen wir zwei Klassendateien
<?phpclass Test
{ public function ceshi(){ echo __FILE__;
}
}
<?phpclass Test
{ public function ceshi(){ echo __FILE__;
}
}
<?php
require_once("a.php");
require_once("b.php");
Sie werden einen schwerwiegenden Fehler finden: Schwerwiegender Fehler: Die Klasse „Test in“ kann nicht neu deklariert werden. . . Offensichtlich kann die Testklasse nicht erneut deklariert werden, da Sie sie zweimal eingeführt haben und die Klassennamen in den beiden Dateien identisch sind, was zu Konflikten führt. Derzeit ist ein Namespace erforderlich, um dieses Problem zu lösen, und das ist einfach.
2. Beispiel 2 Wir modifizieren nun die beiden Klassendateien leicht.
<?php
namespace demo1\a\Test;class Test
{ public function ceshi(){ echo __FILE__;
}
}
<?php
namespace demo1\b\Test;class Test
{ public function ceshi(){ echo __FILE__;
}
}
index.php
<?php
require_once("a.php");
require_once("b.php");
$a1 = new demo1\a\Test\Test();
$a1->ceshi();
D:phpStudyWWWdemodemo1a.php
3 aus.Beispiel 3 Jetzt gibt es zum Beispiel eine andere Situation Ich muss eine Testklasse in .php instanziieren, die mehrmals verwendet wird. Was sollen wir also tun, wenn es schwierig ist, jedes Mal die vollständigen Namespace-Informationen zu schreiben? Beispiel:
<?php require_once("a.php"); require_once("b.php"); $a1 = new demo1\a\Test\Test(); $a2 = new demo1\a\Test\Test(); $a1->ceshi();echo '
'; $a2->ceshi();
Obwohl kein Fehler vorliegt, ist es für Sie schwieriger, den vollständigen Namensraumnamen einzugeben. Obwohl kein Fehler gemeldet wird, kann Strg+V verwendet werden , es ist nicht sehr schön (^ _^).
Sie können dies tun
index.php<?php
require_once("a.php");
require_once("b.php");
use demo1\a\Test\Test;
$a1 = new Test();
$a2 = new Test();
$a1->ceshi();
echo '
';
$a2->ceshi();
4.
Beispiel 5 Dann kommt wieder eine andere Frage, wie folgt:
index.php<?php
require_once("a.php");
require_once("b.php");
use demo1\a\Test\Test;
use demo1\b\Test\Test;
$a = new Test();
$b = new Test();
$a->ceshi();
echo '
';
$b->ceshi();
Schwerwiegender Fehler: Demo1bTestTest kann nicht als Test verwendet werden, da der Name bereits verwendet wird in D:phpStudyWWWdemodemo1index.php online
5
Denn obwohl der Namespace verwendet wird, haben die beiden Klassen den gleichen Namen, beide sind Test und das Programm tut es Ich weiß nicht, welche der beiden Testklassen die Testklassen in b.php sind. Zu diesem Zeitpunkt verwenden Sie das as-Schlüsselwortindex.php
<?php require_once("a.php"); require_once("b.php"); use demo1\a\Test\Test; use demo1\b\Test\Test as bTest; $a = new Test();$b = new bTest(); $a->ceshi();echo 'Das Schlüsselwort as definiert einen Alias für den Klassennamen, der Konflikte mit demselben Klassennamen wirksam verhindern kann
'; $b->ceshi();
5.
Beispiel 6Für Wenn wir uns beispielsweise auf der gleichen Ebene wie a.php befinden, erstellen Sie eine weitere globale Klassendatei: c.php:
c.php
<?php class Test{ public function ceshi(){ echo __FILE__; } }
在index.php文件中这样做即可调用c.php中的test方法
<?php require_once("a.php"); require_once("b.php"); require_once("c.php"); use demo1\a\Test\Test; use demo1\b\Test\Test as bTest; $a = new Test();$a->ceshi(); echo '
'; $b = new bTest(); $b->ceshi(); echo '
'; $c = new \Test(); $c->ceshi(); echo '
';
我们将这种类叫做全局类,如果要使用需要类前面加入反斜杠”\”
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Das obige ist der detaillierte Inhalt vonEinführung in PHP-Namespaces. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!