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 :

  1. 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.
  2. Un chemin relatif, tel que sous-dossier/foo.txt. Cela se r�sout en dossiercourant/sous-dossier/foo.txt.
  3. 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 :

  1. 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.
  2. 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.
  3. 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
?>