Page 1 sur 1

PHP NameSpace - Pétition pour PHP6

Posté : 30 janv. 2007, 11:43
par HUE Christophe
PHP 5 apporte une réelle évolution Object.
Il manque cependant la notion de NameSpace (ou package).

Cette notion apporte pourtant beaucoup dans des développements complexe et permet une bonne architecture des programmes.

Une pétition existe pour montrer l'intérêt que certain développeur ont pour la notion de NameSpaces au près des concepteurs de PHP.

http://www.petitiononline.com/phpns/

Posté : 30 janv. 2007, 12:02
par momox
Pourrait t'on nous expliquer ce qu'est namespaces et l'avantage que cette technique ou technologie représente ?

Posté : 30 janv. 2007, 13:19
par iclo
J'ai pas suffisament d'expérience en objet en php pour me prononcer pour ce langage.
Mais en Java, c'est une fonctionnalité très importante pour structurer un projet un tant soit peu conséquent. La notion de package se retrouve d'aileurs dans UML.

Posté : 30 janv. 2007, 22:43
par HUE Christophe
En gros... Le ‘Namespaces’ permet de structurer ton programme pour deux raisons :
- Le classement
- La surcharge de class

Le classement :
Permet de ranger un ensemble de class appartenant à un domaine précis dans un ‘Espace de Nom’ défini (Espace de noms = Namespaces = Package = chemin répertoire…).

Avec un EDI ou RAD qui tient comptes des Namespaces, L’aide contextuel permettra de naviguer dans les Namespaces comme dans une arborescence qui contient des Class.
Autre avantage, l’organisation et la structure de tes class sont directement intégré au langage. Plus besoin dorganiser ou de ‘Catégoriser’ virtuellement tes Class dans une documentation.

La surcharge de class :
Le principe est de pouvoir créer plusieurs class du même nom qui remplisse des fonctionnalités différentes en fonction du domaine.

Exemple de NameSpace:
Tu souhaites réaliser plusieurs class pour créer des composants graphiques qui permettent d'écrire le code HTML pour un SELECT, INPUT...

Code : Tout sélectionner

- ClassHtmlObject - ClassHtmlForm (extends ClassHtmlObject) - ClassHtmlFormInput (extends ClassHtmlForm) - ClassHtmlFormSelect (extends ClassHtmlForm) - ClassAjaxObject - ClassAjaxSelect (extends ClassAjaxObject)
Le classement ce fait donc comme ceci :
  • - Ressource.Html contient les class Object et form
    - Ressource.Html.Form contient les class Input et Select
    - Ressource.Ajax contient Object et Select
Attention : dans le namespace ‘Ressource.Html’, Form est soit la class Form soit un espace contenant les class Input et Select.
Exemple ‘imagé’ du namespace sous forme d’une arborescance :

Code : Tout sélectionner

- C:\FrameWork\Ressource\Html\Form (Repertoire) - C:\FrameWork\Ressource\Html\Form.class (Class Form)
Et pour créer une instance,

Code : Tout sélectionner

$formLogin = new Ressource.Html.form(); $inputName = new Ressource.Html.form.input();
Vous remarquerez qu’il existe des class portant le même nom (Object et Select)
Cette ‘surcharge’ est utile.
La class Object dans le nameSpace ‘Ressource.Html’ défini les méthodes de base pour gérer des composant HTML et l’autre class Object qui ce trouve dans Ressource.Ajax permet de définir les méthodes de base pour gérer des composant Ajax.

Vous trouverez beaucoup de doc sur la notion de Namesapce pour les langages JAVA ou .NET… Utiliser énormément dans les frameworks, vous en trouverez un exemple avec le framework Javascript http://Qooxdoo.org
Exemple namespace : http://api.qooxdoo.org/current/.

Posté : 31 janv. 2007, 01:12
par Hubert Roksor
Pour info, et si mes souvenirs sont bons, il y a eu deux threads sur php-dev qui ont totalisé quelques centaines de messages sans trouver d'issue.

PS: phpnamespaces.org semble être à l'abandon, d'ailleurs je viens personnellement de revert-er la page d'index