Utilisation des espaces de noms : introduction
Avant de discuter de l'utilisation des espaces de noms, il est important de comprendre comment PHP devine quel espace de noms votre code utilise. Une analogie simple peut �tre faite entre les espaces de noms de PHP et un syst�me de fichiers. Il y a trois moyens d'acc�der � un fichier dans un syst�me de fichiers :
- Un nom relatif de fichier, tel que foo.txt. Cela est r�solu en dossiercourant/foo.txt o� dossiercourant est le dossier de travail. Si le dossier courant est /home/foo, ce nom se r�sout en /home/foo/foo.txt.
- Un chemin relatif, tel que sous-dossier/foo.txt. Cela se r�sout en dossiercourant/sous-dossier/foo.txt.
- Un chemin absolu, tel que /main/foo.txt. Cela se r�sout en /main/foo.txt.
Le m�me principe peut �tre appliqu� aux espaces de noms de PHP. Par exemple, on peut faire r�f�rence � une classe de trois mani�res :
- Un nom sans qualificatif, ou une classe sans pr�fixe, telle que $a = new foo(); ou foo::methodestatique();. Si l'espace de noms courant est espacedenomscourant, ceci se r�sout en espacedenomscourant\foo. Si l'espace de noms est global, soit encore l'espace de noms sans nom, cela devient foo. Une mise en garde : les noms sans qualificatif pour les fonctions et les constantes vont �tre pris dans l'espace de noms global, si la fonction n'est pas d�finie dans l'espace de noms courant. Voyez Utilisation des espaces de noms : retour � l'espace de noms global pour les fonctions et les constantes pour plus de d�tails.
- Un nom qualifi�, ou une classe pr�fix�e telle que $a = new sousespacedenoms\foo(); or sousespacedenoms\foo::methodestatique();. Si l'espace de noms courant est espacedenomscourant, cela devient espacedenomscourant\sousespacedenoms\foo. Si le code est global, c'est � dire l'espace de noms sans nom, cela devient sousespacedenoms\foo.
- Un nom absolu, ou un nom pr�fix� avec un op�rateur global tel que $a = new \espacedenomscourant\foo(); ou \espacedenomscourant\foo::methodestatique();. Cela fait toujours r�f�rence au nom litt�ral sp�cific� dans le code : espacedenomscourant\foo.
Voici un exemple des trois syntaxes, dans du code r�el :
file1.php
<?php
namespace Foo\Bar\sousespacedenoms;
const FOO = 1;
function foo() {}
class foo
{
static function methodestatique() {}
}
?>
file2.php
<?php
namespace Foo\Bar;
include 'file1.php';
const FOO = 2;
function foo() {}
class foo
{
static function methodestatique() {}
}
/* nom non qualifi� */
foo(); // Devient Foo\Bar\foo
foo::methodestatique(); // Devient Foo\Bar\foo, m�thode methodestatique
echo FOO; // Deviet la constante Foo\Bar\FOO
/* nom qualifi� */
sousespacedenoms\foo(); // Devient la fonction Foo\Bar\sousespacedenoms\foo
sousespacedenoms\foo::methodestatique(); // devient la classe Foo\Bar\sousespacedenoms\foo,
// m�thode methodestatique
echo sousespacedenoms\FOO; // Devient la constante Foo\Bar\sousespacedenoms\FOO
/* nom absolu */
\Foo\Bar\foo(); // Devient la fonction Foo\Bar\foo
\Foo\Bar\foo::methodestatique(); // Devient la classe Foo\Bar\foo, m�thode methodestatique
echo \Foo\Bar\FOO; // Devient la constante Foo\Bar\FOO
?>
Notez que pour acc�der � n'importe quelle classe, fonction ou constante globale, un nom absolu peut �tre utilis�, tel que \strlen() ou \Exception ou \INI_ALL.
Exemple #1 Acc�s aux classes, fonctions et constantes globales depuis un espace de noms
<?php
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hi'); // appel la fonction globale strlen
$b = \INI_ALL; // acc�s � une constante INI_ALL
$c = new \Exception('error'); // instantie la classe globale Exception
?>