Les Espaces de Noms
ATTENTION : Les espaces de nom sont introduits à partir de PHP 5.3. Les infos suivantes sont succeptible de modifications
Un espace de nom est un regroupement logique d’identifiants. En PHP, un espace de nom pourra contenir :
- Constantes
- Fonctions
- Classes
Les espaces de noms permettent donc d’avoir plusieurs constantes, fonctions, classes qui portent le même nom mais qui n’appartiennent pas au même espace de nom.
Les éléments auront alors un nom local (nom court) mais auront également un nom qualifié (nom complet contenant l’espace de noms)
On pourra alors utiliser plusieurs composants/bibliothèques même s’ils contiennent des classes/fonctions portant le meme nom
Création d’un namespace
PHP n’autorise qu’un seul espace de nom par fichier. La déclaration du namespace doit donc etre la premiere instruction du fichier. Un meme namespace peut etre utilisé dans plusieurs fichiers.
<?php namespace MyNS;
Il est possible d’acceder a des namespaces imbriqués avec l’opérateur ‘::’ (qui sera éventuellement changé pour cause de confusion avec l’opérateur d’accession de classes)
Utilisation d’un namespace
Si une fonction est utilisée sans espace de noms, elle est recherchée dans l’espace de noms par défaut : L’appel d’une fonction sans préfixe d’espace de nom entrainera la recherche de cette fonction dans l’espace de nom vide.
require_once 'foo.php';
function foo()
{
return 'foo';
}
echo foo(); //Appelera la fonction foo dans l'espace de nom vide donc, la fonction ci-dessus
echo foo::foo(); //Appelera la fonction foo dans le fichier foo.php qui contient l'espace de nom foo
On peut éventuellement préfixer les fonctions qui appartiennent à l’espace de noms par défaut par ‘::’. Dans notre exemple : » ::foo() «
Le mot clé use en PHP
L’utilisation du mot clé use signifie que toutes les ressources provenant de l’espace de noms composé définit peuvent être utilisées par leur noms court
namespace foo::barr:baz; //Utilisation externe : use foo::bar::baz; baz::ressource;
On peu renommer des espaces de noms à l’aide de use quand on à des soucis de « collision » de noms grace au mot clé as
use foo::bar::baz as monNS; use foo::bar:bat as monAutreNS;

Commentaires récents