Aller au contenu Aller au menu Aller au sous menu Aller à la recherche

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

Les commentaires sont tous validés par un modérateur, votre commentaire n'apparaît pas directement sur le site.
Aucun support n'est assuré ici, vous pouvez néanmoins laisser vos remarques et critiques sur l'article, les points de vue pertinents sont toujours les bienvenus.

Votez pour cet article

Vote: 4,00/5
(Nombre de votant(s) : 1)

Traduction automatique

Recherche

Ligams © 2009 tous droits réservés - Contact | Aide à la navigation | Plan du site | Glossaire | Infos légales | Accessibilité