Vous êtes sur la page 1sur 6

Comment utiliser les espaces de noms en PHP Partie 2 : importation, alias et rsolution de nom

par Craig Buckler (Auteur) Joris Crozier (Traducteur)


Date de publication : 07/01/2010 Dernire mise jour :

Cet article est la traduction de Aliases, and Name Resolution.

How to Use PHP Namespaces, Part 2: Importing,

Dans la partie 1, nous avons examin l'utilit des espaces de noms en PHP et le motcl namespace. Dans cet article, nous examinons la commande use et la faon dont PHP rsout les noms d'espace de noms.

Comment utiliser les espaces de noms en PHP Partie 2 : importation, alias et rsolution de nom par Craig Buckler (Auteur) Joris Crozier (Traducteur)

Introduction...................................................................................................................................................................3 Nom pleinement qualifi.........................................................................................................................................3 Nom qualifi............................................................................................................................................................3 Nom non qualifi.................................................................................................................................................... 4 II - Travail au sein du mme espace de noms........................................................................................................... 4 III - Importation d'espace de noms..............................................................................................................................4 IV - Les alias d'espace de noms.................................................................................................................................5 V - Les rgles de rsolution de noms en PHP........................................................................................................... 5 VI - Liens......................................................................................................................................................................6

-2Copyright 2009 - Joris CROZIER. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jcrozier.developpez.com/tutoriels/web/php/espaces-noms-importation-alias-resolution-nom/

Comment utiliser les espaces de noms en PHP Partie 2 : importation, alias et rsolution de nom par Craig Buckler (Auteur) Joris Crozier (Traducteur)

Introduction
A titre d'exemple, nous allons dfinir deux blocs de code presque identique, la seule diffrence est leur espace de noms : lib1.php

<?php // application library 1 namespace App\Lib1; const MYCONST = 'App\Lib1\MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } ?>

lib2.php

<?php // application library 2 namespace App\Lib2; const MYCONST = 'App\Lib2\MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } ?>

Il y a un peu de terminologie PHP comprendre avant de commencer...

Nom pleinement qualifi


Tout code PHP peut se rfrer un nom pleinement qualifi - un identifiant commenant l'espace de noms et par le sparateur de barre oblique inverse - par exemple \App\LIB1\MYCONST, \App\LIB2\MyFunction(), etc. Les noms pleinement qualifis n'ont pas d'ambigut. La premire barre oblique inverse fonctionne de manire semblable un chemin de fichier, il signifie l'espace global du root. Si nous avons implment une fonction MyFunction() diffrente dans notre espace global, elle pourrait tre appele partir de lib1.php ou lib2.php en utilisant \MyFunction(). Les noms pleinement qualifis sont utiles pour des appels uniques de fonctions ou d'initialisation objet. Toutefois, ils peuvent devenir impraticables lorsque vous faites beaucoup d'appels. Comme nous allons le dcouvrir, PHP offre d'autres options pour nous sauver des crampes de frappe des espaces de nommage.

Nom qualifi
Un identifiant avec au moins un sparateur d'espace de noms, par exemple LIB1\MyFunction().

-3Copyright 2009 - Joris CROZIER. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jcrozier.developpez.com/tutoriels/web/php/espaces-noms-importation-alias-resolution-nom/

Comment utiliser les espaces de noms en PHP Partie 2 : importation, alias et rsolution de nom par Craig Buckler (Auteur) Joris Crozier (Traducteur)

Nom non qualifi


Un identifiant, sans sparateur d'espace de noms, par exemple MyFunction().

II - Travail au sein du mme espace de noms


Considrons le code suivant : myapp1.php

<?php namespace App\Lib1; require_once('lib1.php'); require_once('lib2.php'); header('Content-type: text/plain'); echo MYCONST . "\n"; echo MyFunction() . "\n"; echo MyClass::WhoAmI() . "\n"; ?>

Mme si l'on inclut la fois lib1.php et lib2.php, les identificateurs MYCONST, MyFunction, et MyClass rfrencent seulement le code dans lib1.php. Cela se produit parce que le code myapp1.php est dans le mme espace de noms \LIB1 : Rsultat :
App\Lib1\MYCONST App\Lib1\MyFunction App\Lib1\MyClass::WhoAmI

III - Importation d'espace de noms


Les espaces de noms peuvent tre imports grce l'oprateur use, par exemple :
<?php use App\Lib2; require_once('lib1.php'); require_once('lib2.php'); header('Content-type: text/plain'); echo Lib2\MYCONST . "\n"; echo Lib2\MyFunction() . "\n"; echo Lib2\MyClass::WhoAmI() . "\n"; ?>

Vous pouvez dfinir autant de use que voulu ou vous pouvez sparer les espaces de noms par une virgule. Dans cet exemple, nous avons import l'espace de noms App\LIB2. Nous ne pouvons toujours pas faire rfrence directement MYCONST, MyFunction ou MyClass parce que notre code se trouve dans l'espace global, et PHP va les chercher l-bas. Toutefois, si l'on ajoute un prfixe de LIB2\, ils deviennent des noms qualifis. PHP va chercher dans les espaces de noms imports jusqu' ce qu'il trouve une correspondance. Rsultat :
App\Lib2\MYCONST App\Lib2\MyFunction App\Lib2\MyClass::WhoAmI

-4Copyright 2009 - Joris CROZIER. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jcrozier.developpez.com/tutoriels/web/php/espaces-noms-importation-alias-resolution-nom/

Comment utiliser les espaces de noms en PHP Partie 2 : importation, alias et rsolution de nom par Craig Buckler (Auteur) Joris Crozier (Traducteur)

IV - Les alias d'espace de noms


Les alias d'espace de noms sont peut-tre les implmentations les plus utiles. Les alias nous permettent de rfrencer les espaces de noms en utilisant un nom plus court. myapp3.php

<?php use App\Lib1 as L; use App\Lib2\MyClass as Obj; header('Content-type: text/plain'); require_once('lib1.php'); require_once('lib2.php'); echo echo echo echo ?> L\MYCONST . "\n"; L\MyFunction() . "\n"; L\MyClass::WhoAmI() . "\n"; Obj::WhoAmI() . "\n";

La premire dclaration de use dfinit App\LIB1 comme L . Les noms qualifis utilisant des L seront traduits par App\LIB1 au moment de la compilation. On peut donc se rfrer L\MYCONST et L\MyFunction() plutt qu' leurs noms pleinement qualifis. La seconde dclaration de use est plus intressante. Elle dfinit 'obj' comme alias pour la classe MyClass au sein de l'espace de noms App\Lib2\. Cela n'est possible que pour les classes, pas pour des constantes ou des fonctions. Nous pouvons maintenant utiliser new Obj() ou excuter des mthodes statiques, comme indiqu ci-dessus. Rsultat
App\Lib1\MYCONST App\Lib1\MyFunction App\Lib1\MyClass::WhoAmI App\Lib2\MyClass::WhoAmI

V - Les rgles de rsolution de noms en PHP


Les noms d'identifiants en PHP sont rsolus en utilisant les rgles d'espace de noms suivant. Reportez-vous au manuel PHP pour plus d'information. 1 2 3 4 5 6 Les appels des fonctions pleinement qualifies, des classes ou des constantes sont rsolues au moment de la compilation. Les noms qualifis ou non sont convertis selon les rgles d'importation, par exemple si le nom A\B\C est import en tant que C, un appel C\D\e() est traduit en A\B\C\D\e(). L'intrieur d'un espace de noms, tous les noms qualifis qui ne sont pas dj convertis selon les rgles d'importation ont l'espace de noms courant prfix, par exemple si un appel C\D\e() est effectu au sein de l'espace de noms A\B, il est traduit A\B\C\D\e(). Les noms de classes non qualifies sont traduits selon les rgles actuelles d'importation et le nom complet est remplac par le nom import court, par exemple si la classe C dans un espace de noms \B est importe sous X, new X() est traduit en new A\B\C(). Les appels de fonctions non qualifies au sein d'un espace de noms sont rsolus au moment de l'excution. Par exemple, si MyFunction() est appele dans l'espace de noms A\B, PHP cherche d'abord la fonction \A\B \MyFunction(). Si elle n'est pas trouve, il cherche \MyFunction() dans l'espace global. Les appels des noms de classes non qualifis ou qualifis sont rsolus au moment de l'excution. Par exemple, si nous appelons new C() au sein de l'espace de noms A\B, PHP va chercher la classe A\B\C. Si elle n'est pas trouve, il va tenter de charger automatiquement A\B\C.

-5Copyright 2009 - Joris CROZIER. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jcrozier.developpez.com/tutoriels/web/php/espaces-noms-importation-alias-resolution-nom/

Comment utiliser les espaces de noms en PHP Partie 2 : importation, alias et rsolution de nom par Craig Buckler (Auteur) Joris Crozier (Traducteur)

VI - Liens
Vous pouvez aussi aller voir mes autres traductions.

Merci Wachter pour sa relecture orthographique.

-6Copyright 2009 - Joris CROZIER. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jcrozier.developpez.com/tutoriels/web/php/espaces-noms-importation-alias-resolution-nom/

Vous aimerez peut-être aussi