[POO] Class Path

Petit nouveau ! | 6 Messages

22 févr. 2008, 10:26

Bonjour à tous,
Voilà je m'interroge sur une chose et je voulais votre avis là-dessus.

Existe t'il un mecanisme pour gerer son class path en php5 comme on le fait en java, .net ou as ?

Par exemple, je cré plein de jolie classes que je range avec soins dans une arbo comme ci dessous

com.monprojet.core.MaClasse.php
com.monprojet.data.MonAutreClasse.php

etc...

Là où j'ai un soucis c'est lorsque MaClasse.php doit inclure MonAutreClasse.php, je suis obliger d'avoir des ../../../com/monprojet......
bon moi ça me gene un peu je trouve ça moche.

Une solution pourrais etre d'avoir une variable ou une constante CLASS_PATH_ROOT et de l'utiliser pour chaques include
include CLASS_PATH_ROOT."com/monprojet/data/MonAutreClasse.php");

C'est deja un peu plus sex. On pourrait même envisager que notre classe implemente une interface genre IClassPath.php.

Mais bon ça reste tiré par les cheveux.
Une autre solution serait qu'il existe une façon de faire que je ne connais pas ( et c'est trés probable ).


Alors voilà, qu'en pensez vous ? commente faites vous ?


Merci à tous

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

22 févr. 2008, 11:17

Tu pourrais donner le chemin absolu de tes fichiers, mais ce n'est pas forcément très pratique.

Sinon, utilise un chemin relatif et assure-toi que PHP pointe sur le bon répertoire, par exemple avec chdir() en début de script. Si PHP ne trouve pas le fichier, il regardera dans les autres chemins spécifiés dans include_path. (get-include-path())

La solution la plus courament employée consiste à utiliser la constante dont tu parles, ou dirname(__FILE__) + chemin relatif au fichier en cours.

Sinon, tu peux toujours regarder du côté d'autoload() pour ne plus avoir à spécifier le chemin de tes fichiers de classes.

Petit nouveau ! | 6 Messages

22 févr. 2008, 12:28

Merci pour ta reponse Hubert.
Sauf si je ne m'abuse, on est obligé de modifier php.ini pour changer la valeur de include_path.
Si c'est le cas je trouve cela assez contraignant.

Aprés enquete il semblerait que PHP5 souffre d'une vrai lacune dans ce domaine(oui je decouvre un peu)
Apparement les namespaces ne seront supportés qu'avec PHP6.
Certains frameworks auraient aussi pu m'aider, mais ce n'est pas le but.

Du coup je vais rester sur mon idée de constante de classe en attendant PHP6.

Encore merci

Eléphant du PHP | 259 Messages

22 févr. 2008, 12:42

Hello,

Tu n'es peut-être pas obligé de modifier le php.ini.

Pas testé mais un

Code : Tout sélectionner

php_value include_path "..."
dans un ficher .htaccess devrait convenir.

Plus d'infos ici : http://www.php.net/manual/fr/configuration.changes.php

ViPHP
ViPHP | 4674 Messages

22 févr. 2008, 13:37

Ou plus simple, utilise la fonction set_include_path().

Note : avec la constante PATH_SERAPATOR pour séparer les chemins.
« 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).

Mammouth du PHP | 19672 Messages

22 févr. 2008, 14:56

...Apparement les namespaces ne seront supportés qu'avec PHP6....
Sauf erreur, PHP5.3 comporte un patch en natif pour le support des espaces de noms de PHP6.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

25 févr. 2008, 10:13

Mmmm si je comprend bien ça, c'est encore experimental en PHP 5.3
Namespaces are available in PHP as of PHP 5.3.0. This section is experimental and subject to changes.
En ce qui concerne le include_path ça à l'air pas mal du tout, il suffirait que le l'execute une seule fois pour que la valeur soit accessible à tous les scripts.
Mais j'hésite ... si je trouve d'autres raisons d'imposer une initialisation à mon application, je ferais ça. A voir avec le temps...