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 symbolique dans un syst�me de fichiers.
Les espaces de noms PHP supportent deux types d'alias et d'importation : l'alias de nom de classe, et l'alias d'espace de noms. Notez que l'importation de constantes ou fonctions n'est pas support�.
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
?>
Notez que pour les noms avec chemin (les noms absolus contenant des s�parateurs d'espaces, tels que Foo\Bar, par comparaison avec les noms globaux, tels que FooBar), qui n'en contiennent pas, l'anti-slash initial n'est pas n�cessaire, et m�me interdit, car les noms import�s doivent �tre absolus, et ne sont pas r�solus relativement � l'espace de noms courant.
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 qualifications. 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
?>