(PHP 5 >= 5.3.0, PHP 7, PHP 8)
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.
PHP peut aliaser(/importer) les constantes, fonctions, classes, interfaces,
traits, énumérations et les espaces de noms.
Un alias est créé avec l'opérateur use
.
Voici un exemple qui présente les cinq 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;
// importation d'une fonction
use function My\Full\functionName;
// alias d'une fonction
use function My\Full\functionName as func;
// importation d'une constante
use const My\Full\CONSTANT;
$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
func(); // Appel la fonction My\Full\functionName
echo CONSTANT; // affiche la valeur de My\Full\CONSTANT
?>
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'antislash initial n'est pas nécessaire et n'est pas recommandé, 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 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;
function toGreenlandic
{
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.
Déclaration du groupe use
Les classes, fonctions et constantes importées depuis
le même namespace
peuvent être regroupées dans une
seule instruction use
.