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 AnotherMy\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 AnotherMy\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 AnotherMy\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
?>