(PHP 5 >= 5.3.0, PHP 7)
Die Möglichkeit, auf vollständig qualifizierte Namen mit einem Alias (Importieren) zuzugreifen, ist ein wichtiges Feature von Namespaces. Dies ist ähnlich wie die Möglichkeit von Unix-basierten Dateisystemen einen symbolischen Link auf eine Datei oder ein Verzeichnis anzulegen.
Alle PHP-Versionen die Namespaces unterstützen drei Arten von Aliasen oder Importen: Einen Alias für einen Klassennamen, einen Alias für einen Interfacenamen und einen Alias für einen Namespace. PHP 5.6+ erlauben ebenfalls den Import bzw. die Vergabe eines Alias für Funktionen und Konstanten.
Ein Alias wird in PHP mittels des use-Operators angelegt. Hier ein Beispiel, welches alle fünf Arten von Importen zeigt:
Beispiel #1 Aliase/Importieren mit dem use-Operator
<?php
namespace foo;
use My\Full\Classname as Another;
// dies ist das gleiche wie use My\Full\NSname as NSname
use My\Full\NSname;
// importiert eine globale Klasse
use ArrayObject;
// Eine Funktion importieren (PHP 5.6+)
use function My\Full\functionName;
// Alias für eine Funktion (PHP 5.6+)
use function My\Full\functionName as func;
// Eine Konstante importieren (PHP 5.6+)
use const My\Full\CONSTANT;
$obj = new namespace\Another; // erzeugt ein Objekt der Klasse foo\Another
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
NSname\subns\func(); // ruft die Funktion My\Full\NSname\subns\func auf
$a = new ArrayObject(array(1)); // erzeugt ein Objekt der Klasse ArrayObject
// ohne das "use ArrayObject" wäre ein Objekt der Klasse foo\ArrayObject erzeugt worden
func(); // ruft die Funktion My\Full\functionName auf
echo CONSTANT; // Gibt den Wert von My\Full\CONSTANT aus
?>
PHP unterstützt zusätzlich auch eine komfortable Kurzsyntax, mit der mehrere use-Ausdrücke in der gleichen Zeile erscheinen können.
Beispiel #2 Aliase/Importieren mit dem use-Operator, mehrere use-Ausdrücke kombiniert
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
NSname\subns\func(); // ruft die Funktion My\Full\NSname\subns\func auf
?>
Importieren wird zur Kompilierungszeit ausgeführt und hat daher keinen Einfluss auf dynamische Klassen-, Funktions- oder Konstantennamen.
Beispiel #3 Importieren und dynamische Namen
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
$a = 'Another';
$obj = new $a; // erzeugt ein Objekt der Klasse Another
?>
Zusätzlich beeinflusst das Importieren nur unqualifizierte und qualifizierte Namen. Vollständig qualifizierte Namen sind absolut und werden von Importen nicht beeinflusst.
Beispiel #4 Importieren und vollständig qualifizierte Namen
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // erzeugt ein Objekt der Klasse My\Full\Classname
$obj = new \Another; // erzeugt ein Objekt der Klasse Another
$obj = new Another\thing; // erzeugt ein Objekt der Klasse My\Full\Classname\thing
$obj = new \Another\thing; // erzeugt ein Objekt der Klasse Another\thing
?>
Das Schlüsselwort use muss im äußersten Gültigkeitsbereich (dem globalen Gültigkeitsbereich) oder innerhalb einer Namespace-Deklaration angegeben werden. Das ist darin begründet, dass Importe zur Kompilierungszeit und nicht zur Laufzeit durchgeführt werden und daher nicht in einem anderen Gültigkeitsbereich liegen dürfen. Das folgende Beispiel zeigt eine ungültige Verwendung des use-Schlüsselwortes:
Beispiel #5 Ungültige Importregel
<?php
namespace Languages;
function toGreenlandic()
{
use Languages\Danish;
// ...
}
?>
Hinweis:
Importregeln sind auf Dateibasis gültig, das heißt eine eingebundene Datei wird NICHT die Importregeln der einbindenden Datei erben.
Von PHP 7.0 an können Klassen, Funktionen und Konstanten, die aus dem gleichen Namespace importiert werden, in einer einzigen use Anweisung gruppiert werden.
<?php
// Pre PHP 7 Code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7+ Code
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};