Heim > Artikel > Backend-Entwicklung > PHP mit Aliasen und Importen
Das Ermöglichen der Referenzierung oder des Imports externer vollständig qualifizierter Namen über Aliase ist eine wichtige Funktion von Namespaces. Dies ähnelt in etwa der Art und Weise, wie Sie symbolische Links zu anderen Dateien oder Verzeichnissen in einem Unix-ähnlichen Dateisystem erstellen können.
Der PHP-Namespace unterstützt zwei Arten der Verwendung von Aliasen oder Importen: die Verwendung von Aliasen für Klassennamen oder die Verwendung von Aliasen für Namespace-Namen. Beachten Sie, dass PHP den Import von Funktionen oder Konstanten nicht unterstützt.
In PHP werden Aliase durch die Verwendung des Operators implementiert. Das Folgende ist ein Beispiel, das alle drei möglichen Importmethoden verwendet:
Beispiel #1 Verwenden Sie den Use-Operator, um Aliase zu importieren/verwenden
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use \ArrayObject; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 ?>
Achten Sie auf den Namen im Namespace (einschließlich Name Für vollständig qualifizierte Namen mit Leerzeichentrennzeichen wie FooBar und entsprechende globale Namen ohne Namespacetrennzeichen wie FooBar ist der führende Backslash unnötig und nicht zulässig, da der importierte Name vollständig qualifiziert sein muss. Es wird keine relative Auflösung für den aktuellen Namespace durchgeführt .
Um die Bedienung zu vereinfachen, unterstützt PHP auch mehrere Use-Anweisungen in einer Zeile
Beispiel #2 Import/Use-Aliase über den Use-Operator, einschließlich mehrerer Use-Anweisungen in einer Zeile
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func ?>
Der Importvorgang wird während der Kompilierung ausgeführt, der dynamische Klassenname, Funktionsname oder Konstantenname jedoch nicht.
Beispiel #3 Import und dynamische Namen
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
Außerdem betrifft der Importvorgang nur unqualifizierte und qualifizierte Namen. Vollqualifizierte Namen sind von Importen nicht betroffen, da sie deterministisch sind.
Beispiel #4 Import und vollständig qualifizierte Namen
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化My\Full\Classname类的对象 $obj = new \Another; // 实例化Another类的对象 $obj = new Another\thing; // 实例化My\Full\Classname\thing类的对象 $obj = new \Another\thing; // 实例化Another\thing类的对象 ?>