(PHP 5 >= 5.3.0)
Utilisation des espaces de noms : importation et alias
La capacité de faire référence à un nom absolu avec un alias ou en important un espace de noms est stratégique. C'est un avantage similaire aux liens symboliques dans un système de fichiers.
Les espaces de noms PHP supportent trois types d'alias ou d'importation : l'alias de nom de classe, l'alias de nom d'interface, et l'alias d'espace de noms. Notez que l'importation de constantes ou fonctions n'est pas supportée.
En PHP, l'alias est créé avec l'opérateur use. Voici un exemple qui présente les trois types d'importation :
Exemple #1 importation et alias avec l'opérateur use
<?php namespace foo; use My\Full\Classname as Another; // Ceci est la même chose que use My\Full\NSname as NSname use My\Full\NSname; // importation d'une classe globale use ArrayObject; $obj = new namespace\Another; // instantie un objet de la classe foo\Another $obj = new Another; // instantie un objet de la classe My\Full\Classname NSname\subns\func(); // appelle la fonction My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // instantie un objet de la classe ArrayObject // Sans l'instruction "use ArrayObject" nous aurions instantié un objet de la classe foo\ArrayObject ?>
De plus, PHP supporte des raccourcis pratiques, tels que les commandes use multiples.
Exemple #2 importation et alias multiples avec l'opérateur use
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instantie un objet de la classe My\Full\Classname NSname\subns\func(); // appelle la fonction My\Full\NSname\subns\func ?>
L'importation est réalisée à la compilation, ce qui fait que cela n'affecte pas les classes, fonctions et constantes dynamiques.
Exemple #3 Importation et noms d'espaces dynamiques
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instantie un objet de la classe My\Full\Classname $a = 'Another'; $obj = new $a; // instantie un objet de la classe Another ?>
De plus, l'importation n'affecte que les noms sans qualification. Les noms absolus restent absolus, et inchangés par un import.
Exemple #4 Importation et noms d'espaces absolus
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // instantie un objet de la classe My\Full\Classname $obj = new \Another; // instantie un objet de la classe Another $obj = new Another\untruc; // instantie un objet de la classe My\Full\Classname\untruc $obj = new \Another\untruc; // instantie un objet de la classe Another\untruc ?>
Règles de contextes pour l'importation
Le mot-clé use doit être déclaré dans le contexte le plus externe d'un fichier (le contexte global) ou alors dans les déclarations d'espace de noms. Ceci car l'importation est effectuée à la compilation et non durant l'éxecution, donc on ne peut empiler les contextes. L'exemple qui suit montre des utilisation incorrectes du mot-clé use:
Exemple #5 Règles d'importation incorrectes
<?php namespace Languages; class Greenlandic { use Languages\Danish; ... } ?>
Note:
Les règles d'importation sont basées sur les fichiers, ce qui signifie que les fichiers inclus n'hériteront PAS des règles d'importation du fichier parent.