août 19 2008
PHP et les Espaces de Noms ou Namespaces
Qu’est ce qu’un namespaces ?
Une des nouveautés majeure de PHP 5.3 est le support des namespaces. Mais qu’est-ce donc que les espaces de nom ?
Pour l’expliquer très simplement, il suffit de remonter à l’époque ou l’envie vous prenait de créer une fonction appelée date.
Votre fonction déclarée par le mot clé function se retrouvée dans la contexte global.
Par conséquent, comme PHP intègre déjà une fonction native appelée date dans le contexte global, et qu’il est impossible de re-déclarer une fonction.
Une erreur de la forme suivante vous était remontée :
Fatal error: Cannot redeclare date()
C’est à ce moment que les espaces de nom entrent en jeu !
Les namespaces permettent de créer des espaces décalés par rapport à l’espace global.
Ainsi, il est possible dans un espace de nom de déclarer des noms de fonctions et classes connues dans l’espace global !
Comment utiliser les namespaces ?
L’utilisation d’un espace de nom est très simple, il s’utilise comme ceci :
Déclarer un namespace
-
<?php
-
// test_a.php
-
namespace MySpace::MySubSpace;
-
function MyFunction()
-
{
-
$str = ‘Julien Breux’; // Petit coucou pour Google
-
return $str;
-
}
-
?>
Utiliser un namespace par chemin absolue
-
<?php
-
// test_b.php
-
require(‘test_a.php’);
-
-
$result = MySpace::MySubSpace::MyFunction();
-
?>
Utiliser un namespace par “importation”
-
<?php
-
// test_c.php
-
require(‘test_a.php’);
-
-
// Exemple 1
-
use MySpace;
-
$result = MySubSpace::MyFunction();
-
-
// Exemple 2
-
use MySpace::MySubSpace;
-
$result = MyFunction();
-
?>
Utiliser un namespace avec des alias
-
<?php
-
// test_d.php
-
require(‘test_a.php’);
-
-
use MySpace::MySubSpace::MyClass as MyOtherClass;
-
$result = new MyOtherClass();
-
?>
Aller plus loin
Quelques points importants sont aussi à noter avec l’arrivée des espaces de nom:
- La constante __NAMESPACE__ est chargée de retourner le nom du namespace courant.
- Possibilité de déclarer une constante avec le mot clé CONST à l’intérieur un namespace.
- Pour utiliser une fonction de l’espace de nom global, nous utilisons l’accesseur directe ::MyGlobalFunction();
Mot de la fin
Les namespaces, c’est bien !
Dans le prochain article, nous parlerons de la librairie PHAR intégrée en natif à PHP6.