WTF::namespaces

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

13 juil. 2007, 08:21

No_More_Absurdly_Long_Class_Names

Ladies and gentlemen, we have namespaces.
Après plus de 9000 messages sur la mailing list php-dev, les namespaces, originalement prévus pour PHP 5, débarquent dans PHP 6.

PS: la fin du monde est prévue pour lundi.

ViPHP
ViPHP | 928 Messages

13 juil. 2007, 09:48

Bonjour,
si j'ai bien compris les namespace auront leur utilité dans la création de package ? (Genre pear, symphony, etc..) ?

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 juil. 2007, 10:00

Il était temps (voire trop tard), maintenant que moultes frameworks existent.
On aura une réelle utilité de cette fonctionnalité dans 2 ans environ, quand PHP6 sera devenu réellement standard, en attendant les fake-classes ont de beaux jours devant elles.

Enfin on va pas se plaindre, mais j'enrage toujours quand je pense que ça devrait être là depuis de nombres mois :(

ViPHP
ViPHP | 4674 Messages

13 juil. 2007, 10:15

Je n'étais pas au courant de ça :o

Quelles sont les avantages et inconvénients ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 juil. 2007, 13:58

Quelles sont les avantages et inconvénients ?
Et bien imaginons que tu veux faire un package avec un moteur de template, une librarie d'envoi de mails, etc…
Tu voudrais appeler ton moteur de template «Template», ta lib de mail «Mailer», etc…

Sauf que tu peux pas, parce qu'il est vraisemblable que ce genre de nom générique sera déjà pris. Donc tu vas les appeler «MonFramework_Template», «MonFramework_Mailer», etc… L'inconvénient étant que partout dans ton package tu devras réutiliser ces noms longs (tu auras des trucs affreux genre «class MonFramework_TemplateHTML extends MonFramework_Template implements MonFramework_IObject»).

Avec les namespaces tu dis que ton package est dans l'espace de nom «MonFramework», et donc tes classes gardent leur joli nom «Template» & cie.
Et côté utilisateur, il appelle «$template = new MonFramework::Template» ou bien il indique quelque part qu'il se place dans l'espace de nom «MonFramework» (genre avec un «import MonFramework») et peut alors directement utiliser «new Template».

Je n'ai aucune idée de la façon dont c'est implémenté dans PHP6, mais l'idée générale est celle-là.

Ce qui est intéressant c'est qu'on abstrait encore un peu plus, on peut très bien imaginer changer de package en changeant simplement le namespace pour peu que les deux packages utilisent les même classes avec les mêmes méthodes. Ou bien on peut imaginer utiliser deux packages déclarant la même classe, et forcer l'utilisation de la classe «Template» du premier package, tout en souhaitant utiliser la classe «Mailer» du second package.

On peut aussi imaginer que les frameworks qui incluent une classe «externe» (comme Symfony inclut Creole) les placent sous leur propre namespace, ce qui permet de laisser à l'utilisateur la possibilité d'utiliser une autre version de la librairie Creole en même temps que Symfony utilise sa version incluse. Bref, cela simplifie grandement la cohabitation des projets.

Quand on regarde comme ça, on se dit que ce sont des cas bien particuliers. Oui peut-être, mais on n'a aucune autre solution pour les résoudre :)

Edit : en fait c'est exactement ça, au terme «import» près, qui a été proposé : http://marc.info/?l=php-dev&m=118355320225178&w=2

ViPHP
ViPHP | 4674 Messages

13 juil. 2007, 14:48

Merci, j'ai tout pigé :)

Je connaissais les namespaces, mais pas leurs utilisations.

Si j'ai choisi un namespace de 3 lettres, c'est pas rien non plus hehe. Comme symfony a pris sf, et Zend Framework a pris Zend. Ce n'est pas encore trop handicapant du coup.

PHP devient vraiment intéressant, c'est assez jouissif ^^
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).