Fil d'ariane
Ligams » Publications » Serveur Web » Namespace PHP
Des espaces de noms en PHP
Les développeurs PHP l'ont attendu longtemps, les namespaces existent désormais en PHP depuis la version 5.3.0, une avancée majeure pour tout ceux qui ont à inclure des librairies.
Qu'est-ce qu'un namespace ?
La définition large d'un namespace est un moyen d'encapsuler des choses : un exemple concret pris sur le site php.net : le fichier foo.txt peut exister dans le dossier /home/stephane et également dans /home/paul, mais 2 copies de ce fichier ne peuvent coexister dans le même dossier. De plus, pour accéder à foo.txt dans un autre dossier que celui qui le contient, il faut entrer son "adresse" absolue /home/stephane/foo.txt.
C'est le même principe dans le monde de la programmation.
En PHP , les namespaces ont été implémentés pour résoudre 2 problèmes que les auteurs des librairies et applications rencontraient lorsqu'ils créaient des morceaux de code réutilisables :
- Collision de nom : problème de nom de fonction/classes/constantes sur des parties tierces,
- Augmenter la lisibilité du code, pour éviter les alias trop long.
Les namespaces sont donc un excellent moyen de grouper les classes PHP proches, les fonctions, les constantes pour rendre le code plus lisible et facilement ré-utilisable.
Déclarer un namespace
Pour déclarer un namespace dans un fichier PHP, il suffit d'ajouter en haut du fichier :
namespace MyProject;
Aucun code non PHP ne peut précéder la déclaration du namespace.
Déclarer un sous-namespace
Pour déclarer un sous-namespace :
namespace MyProject\Sub\Level;
Utilisation du caractère-clef "\", cela aurait été plus joli avec un point, mais c'est le fond qui compte !
Plusieurs namespace dans le même fichier
Contrairement à certains langages, il est possible de déclarer plusieurs namespace dans un seul fichier :
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // global code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
Exemple d'utilisation du Namespace PHP
namespace my\name;
class MyClass {}
function myfunction() {}
const MYCONST = 1;
$a = new MyClass;
$c = new \my\name\MyClass; // utilisation du même nom de classe MyClass dans un autre namespace
$a = strlen('hi');
$d = namespace\MYCONST;
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d);
Le seul truc un peu regrettable, mais c'est habituel (malheureusement), c'est la syntaxe un peu moche ! (point de vue totalement subjectif)
Cet article et les exemples affichés sont tirés de la documentation officielle de PHP pas encore traduite à propos des namespace en PHP.
Commentaires
Votez pour cet article
Vote: 4,00/5
(Nombre de votant(s) : 1)



