SunshinePHP Developer Conference 2015

Introduction aux espaces de noms

(PHP 5 >= 5.3.0)

Que sont les espaces de noms ? Dans leur définition la plus large, ils représentent un moyen d'encapsuler des éléments. Cela peut être conçu comme un concept abstrait, à différents endroits. Par exemple, dans un système de fichiers, les dossiers représentent un groupe de fichiers associés et servent d'espace de noms pour les fichiers qu'ils contiennent. Un exemple concret est que le fichier foo.txt peut exister dans les deux dossiers /home/greg et /home/other, mais que les deux copies de foo.txt ne peuvent pas co-exister dans le même dossier. De plus, pour accéder au fichier foo.txt depuis l'extérieur du dossier /home/greg, il faut préciser le nom du dossier en utilisant un séparateur de dossier, tel que /home/greg/foo.txt. Le même principe s'applique aux espaces de noms dans le monde de la programmation.

Dans le monde PHP, les espaces de noms sont conçus pour résoudre deux problèmes que rencontrent les auteurs de bibliothèques et d'applications lors de la réutilisation d'éléments tels que des classes ou des bibliothèques de fonctions :

  1. Collisions de noms entre le code que vous créez, les classes, fonctions ou constantes internes de PHP, ou celle de bibliothèques tierces.
  2. La capacité de faire des alias ou de raccourcir des Noms_Extremement_Long pour aider à la résolution du premier problème, et améliorer la lisibilité du code.

Les espaces de noms PHP fournissent un moyen pour regrouper des classes, interfaces, fonctions ou constantes. Voici un exemple de syntaxe des espaces de noms PHP :

Exemple #1 Exemple de syntaxe des espaces de noms

<?php
namespace mon\nom// Voyez la section "Définition des espaces de noms"

class MaClasse {}
function 
mafonction() {}
const 
MACONSTANTE 1;

$a = new MaClasse;
$c = new \mon\nom\MaClasse// Voyez la section "Espace global"

$a strlen('bonjour'); // Voyez "Utilisation des espaces de noms : retour
       // à l'espace global

$d = namespace\MACONSTANTE// Voyez "L'opérateur namespace et la constante __NAMESPACE__

$d __NAMESPACE__ '\MACONSTANTE';
echo 
constant($d); // Voyez "Espaces de noms et fonctionnalités dynamiques"
?>

Note:

Les espaces de noms PHP et php, mais aussi les noms composés commençant par ces noms (comme PHP\Classes) sont réservés pour l'utilisation interne du langage, et ne doivent pas être utilisés dans le code de l'espace utilisateur.

add a note add a note

User Contributed Notes 3 notes

up
156
SteveWa
3 years ago
Thought this might help other newbies like me...

Name collisions means:
you create a function named db_connect, and somebody elses code that you use in your file (i.e. an include) has the same function with the same name.

To get around that problem, you rename your function SteveWa_db_connect  which makes your code longer and harder to read.

Now you can use namespaces to keep your function name separate from anyone else's function name, and you won't have to make extra_long_named functions to get around the name collision problem.

So a namespace is like a pointer to a file path where you can find the source of the function you are working with
up
65
Dmitry Snytkine
3 years ago
Just a note: namespace (even nested or sub-namespace) cannot be just a number, it must start with a letter.
For example, lets say you want to use namespace for versioning of your packages or versioning of your API:

namespace Mynamespace\1;  // Illegal
Instead use this:
namespace Mynamespace\v1; // OK
up
11
php dot net at e-z dot name
11 months ago
php namespaces are case-insensitive:

file1.php:
<?php
namespace foo;

function
bar()
{
    echo
'from bar';
}

?>

file2.php:
<?php

fOo
\bar() // output: from bar

?>
To Top