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