IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> définition de "path de dossiers" (php), toujours terminer par un "directory separator" ?
Options
toluol
posté 30 Sep 2016, 00:03
Message #1


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 792
Inscrit : 14 Nov 2003
Lieu : Genève
Membre no 11 656



Bonsoir,

J'ai une question toute bête...
En essayant d'améliorer mon code, je me suis rendu compte que je n'étais pas systématique dans les définitions de mes constantes, et en particulier pour mes chemins de dossiers
Voici typiquement une erreur que je fais :
Code
define ('IMAGES', 'webroot/images/');
define ('CLASSES', 'system/classes');

On peut remarquer qu'une fois, je termine la constante IMAGES par un "/" alors que CLASSES termine avec le nom du dossier.
Evidemment, il vaut mieux être systématique, et terminer avec un "/" me semble parfois plus économique et pratique, mais je me demandais...

Y'aurait-t-il un désavantage à terminer les chemins de dossier par "/" ? Y'a-t-il une convention de programmation ?

Ce qui m'interroge, c'est que lorsqu'on fait une fonction PHP qui retourne des noms de dossiers (par exemple echo realpath(dirname(__FILE__)); ou $_SERVER['DOCUMENT_ROOT'] ), il n'y a justement rien...

Ce message a été modifié par toluol - 30 Sep 2016, 00:11.
Go to the top of the page
 
+Quote Post
Pascal 77
posté 30 Sep 2016, 08:20
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 052
Inscrit : 10 Oct 2005
Membre no 47 611



Citation (toluol @ 30 Sep 2016, 01:03) *
Bonsoir,

J'ai une question toute bête...
En essayant d'améliorer mon code, je me suis rendu compte que je n'étais pas systématique dans les définitions de mes constantes, et en particulier pour mes chemins de dossiers
Voici typiquement une erreur que je fais :
Code
define ('IMAGES', 'webroot/images/');
define ('CLASSES', 'system/classes');

On peut remarquer qu'une fois, je termine la constante IMAGES par un "/" alors que CLASSES termine avec le nom du dossier.
Evidemment, il vaut mieux être systématique, et terminer avec un "/" me semble parfois plus économique et pratique, mais je me demandais...

Y'aurait-t-il un désavantage à terminer les chemins de dossier par "/" ? Y'a-t-il une convention de programmation ?

Ce qui m'interroge, c'est que lorsqu'on fait une fonction PHP qui retourne des noms de dossiers (par exemple echo realpath(dirname(__FILE__)); ou $_SERVER['DOCUMENT_ROOT'] ), il n'y a justement rien...


Une analogie simple pour t'expliquer : si le dossier était une maison, sans le slash, tu es devant la porte d'entrée, avec le slash, tu es à l'intérieur. Quand tu demande le chemin d'un dossier, le slash qui importe, c'est celui du volume ou du dossier qui contient celui que tu cherches, mais si tu veux "entrer" dans le dossier, là, faut "ouvrir la porte", porte dont le slash final est la clé.

Je ne pratique pas le PHP, mais dans les langages de programmation que j'ai utilisé, c'était la syntaxe qui allait bien, même si certains d'entre eux permettaient de prendre quelques libertés avec.

Ce message a été modifié par Pascal 77 - 30 Sep 2016, 08:21.


--------------------
Un Windows pour les gouverner tous, un Windows pour les trouver, et dans les ténèbres, les lier … Euuh je vais pitêt rester sur Mac !
Go to the top of the page
 
+Quote Post
toluol
posté 30 Sep 2016, 09:41
Message #3


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 792
Inscrit : 14 Nov 2003
Lieu : Genève
Membre no 11 656



Hum... Avec cette analogie, je ne suis pas sûr d'avoir compris ton choix final... Tu ne mettrais donc pas de slash final à la définition de ces dossiers ? ...donc pas de "clef" ?
En même temps, donner l'adresse de quelque chose qui est "fermé à clef", ou une adresse "à côté", je trouve ça un peu ridicule... Et dans la mesure où toutes "les clefs" sont les mêmes, autant les laisser dedans, cela ira plus vite pour entrer quand on aura besoin du chemin non ? tongue.gif

Cela me semble utile de laisser un slash, surtout par souci d'économie et de clarté du code
Code
if(file_exists(IMAGES.'/'.$filename)){
if(file_exists(IMAGES.$filename)){

et aussi pour éviter les risques d'oubli.

Et si, pour de rares cas, on en a pas besoin (lesquels ?), un petit substr(IMAGES, 0, -1); fera l'affaire, il me semble...

Merci encore pour vos avis !


Go to the top of the page
 
+Quote Post
yponomeute
posté 30 Sep 2016, 09:42
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 969
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Il y a des standards de programmation pour php
http://www.php-fig.org/psr/


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
toluol
posté 30 Sep 2016, 10:00
Message #5


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 792
Inscrit : 14 Nov 2003
Lieu : Genève
Membre no 11 656



Citation (yponomeute @ 30 Sep 2016, 10:42) *
Il y a des standards de programmation pour php
http://www.php-fig.org/psr/


Oui, j'ai cherché ces standard... hélas, dans le cas du site que tu proposes, ils ne disent rien sur ces déclarations de chemin.
Go to the top of the page
 
+Quote Post
yponomeute
posté 30 Sep 2016, 10:04
Message #6


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 969
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Citation (toluol @ 30 Sep 2016, 10:41) *
Cela me semble utile de laisser un slash, surtout par souci d'économie et de clarté du code
Code
if(file_exists(IMAGES.'/'.$filename)){
if(file_exists(IMAGES.$filename)){

et aussi pour éviter les risques d'oubli.

Et si, pour de rares cas, on en a pas besoin (lesquels ?), un petit substr(IMAGES, 0, -1); fera l'affaire, il me semble...

Merci encore pour vos avis !

Tu parles de clarté de code et ensuite tu parles d'un "petit" substr(IMAGES, 0, -1) wacko.gif
Cela ressemble plus à de l'offuscation qu'à de la clarté pour moi.

Si tu doit faire du substr sur une CONSTANTE tu as un problème de conception quelque part dans ton application.
Ensuite pour enlever spécifiquement un "/" en fin de chaine de caractère on utilise rtrim($str, '/'), cela permet déjà de ne pas enlever un caractère si le "/" ne se trouve pas en fin de chaine, et cela rend aussi le code compréhensible.


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
No6
posté 30 Sep 2016, 10:24
Message #7


Oui ?
*****

Groupe : Membres
Messages : 3 889
Inscrit : 24 Jun 2003
Lieu : BZH
Membre no 8 224



C'est bien d'avoir des règles de codage, ça permet de ne pas se poser les mêmes questions idiotes des milliers de fois genre :
bon, ben cette fichue constante, est-ce qu'elle a son slash à la fin ou dois-je le rajouter (ou l'enlever) selon le besoin.
et de se retrouver à éplucher son code pour savoir quoi faire, voire se noyer pour se souvenir de celles qui en ont et celles qui n'en ont pas et qui se côtoient dans le code, et rebelotte, au moment d'un débugging, pour vérifier qu'on à bien ce fichu slash....

Bref, le meilleur moyen de perdre du temps et rajouter un stress idiot.

Alors choisi avec ou sans, mais après ne change plus jamais cette règle [et quelque soit le langage] ; ça t'évitera de te prendre la tête par la suite, voir gagner du temps.
Perso je ne met jamais le slash final.
ou alors utilise une convention d'écriture sur la constante pour savoir si le slash est présent à la fin, mais c'est plutôt relou.

Les optimiseurs de code établissent l'addition avec peu de frais, alors que ça leur est plus coûteux pour le retrancher


--------------------
"Je sais que vous croyez comprendre ce que vous pensez que j'ai dit, mais je ne suis pas sûr que vous réalisiez que ce que vous avez entendu n'est pas ce que je pense."
(Alan Greenspan)
Go to the top of the page
 
+Quote Post
toluol
posté 30 Sep 2016, 13:32
Message #8


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 792
Inscrit : 14 Nov 2003
Lieu : Genève
Membre no 11 656



Citation (yponomeute @ 30 Sep 2016, 11:04) *
Tu parles de clarté de code et ensuite tu parles d'un "petit" substr(IMAGES, 0, -1) wacko.gif
Cela ressemble plus à de l'offuscation qu'à de la clarté pour moi.
Si tu doit faire du substr sur une CONSTANTE tu as un problème de conception quelque part dans ton application.
C'est pour cela que j'ai parlé de quelques rares cas où on aurait besoin de cela.
Perso, j'ai l'impression que j'ai besoin du slash dans 98% des cas et "sans" dans 2% des cas.
Du coup, je serais plus clair dans ces 98% et j'utiliserais une fonction "de réduction" dans 2% des cas (voir moins)... Cela a une certaine logique !

Citation (yponomeute @ 30 Sep 2016, 11:04) *
Ensuite pour enlever spécifiquement un "/" en fin de chaine de caractère on utilise rtrim($str, '/'), cela permet déjà de ne pas enlever un caractère si le "/" ne se trouve pas en fin de chaine, et cela rend aussi le code compréhensible.
Un point pour toi. Cette fonction est plus claire.

Citation (No6 @ 30 Sep 2016, 11:24) *
C'est bien d'avoir des règles de codage, ça permet de ne pas se poser les mêmes questions idiotes des milliers de fois genre :
bon, ben cette fichue constante, est-ce qu'elle a son slash à la fin ou dois-je le rajouter (ou l'enlever) selon le besoin.
et de se retrouver à éplucher son code pour savoir quoi faire, voire se noyer pour se souvenir de celles qui en ont et celles qui n'en ont pas et qui se côtoient dans le code, et rebelotte, au moment d'un débugging, pour vérifier qu'on à bien ce fichu slash....

Bref, le meilleur moyen de perdre du temps et rajouter un stress idiot.

Alors choisi avec ou sans, mais après ne change plus jamais cette règle [et quelque soit le langage] ; ça t'évitera de te prendre la tête par la suite, voir gagner du temps.
C'est toute la raison de mon post. ;-)

Citation (No6 @ 30 Sep 2016, 11:24) *
Perso je ne met jamais le slash final.
Les optimiseurs de code établissent l'addition avec peu de frais, alors que ça leur est plus coûteux pour le retrancher

Voilà qui m'intéresse. Donc, en général, ils le rajoutent quasiement partout, plutôt que le mettre directement dans la constante ? Je ne sais pas ce qui est le plus coûteux ou "source d'erreur" !
Si c'est une question de proportions (et uniquement cela), je choisirais plutôt de laisser ce slash... S'il y a d'autres raisons, je suis curieux de les entendre.
Cela m'embête aussi d'aller contre ce qui se fait habituellement... Mais je cherche encore des raisons pour lesquelles il est vraiment désavantageux de laisser le slash dans la constante.
Go to the top of the page
 
+Quote Post
No6
posté 30 Sep 2016, 16:51
Message #9


Oui ?
*****

Groupe : Membres
Messages : 3 889
Inscrit : 24 Jun 2003
Lieu : BZH
Membre no 8 224



Les opérations sur les string sont toujours coûteuses en temps CPU
Alors qu'une simple concaténation de chaîne peut être directement opérée au niveau de l'analyseur de code et ne plus rien coûter dans l'interpréteur du langage.


--------------------
"Je sais que vous croyez comprendre ce que vous pensez que j'ai dit, mais je ne suis pas sûr que vous réalisiez que ce que vous avez entendu n'est pas ce que je pense."
(Alan Greenspan)
Go to the top of the page
 
+Quote Post
toluol
posté 30 Sep 2016, 22:51
Message #10


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 792
Inscrit : 14 Nov 2003
Lieu : Genève
Membre no 11 656



Ok, voilà un bon argument qui fait sens. J'adopte ! laugh.gif
Go to the top of the page
 
+Quote Post
yponomeute
posté 1 Oct 2016, 10:13
Message #11


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 969
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Si on fait un "echo" en php on peut éviter la concaténation

Code
echo $str1 . $str2 . $str3; // fait une concaténation avant de faire un echo de la variable concaténée

echo $str1 , $str2, $str3; // fait simplement un echo des 3 variables sans faire de concaténation préalable


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
No6
posté 1 Oct 2016, 11:50
Message #12


Oui ?
*****

Groupe : Membres
Messages : 3 889
Inscrit : 24 Jun 2003
Lieu : BZH
Membre no 8 224



oui, mais je faisais référence à l’analyseur syntaxique , qui passe avant toute interprétation.

Maintenant ont peut aussi lancer une petit test de le temps cpu pour être complètement certain.


--------------------
"Je sais que vous croyez comprendre ce que vous pensez que j'ai dit, mais je ne suis pas sûr que vous réalisiez que ce que vous avez entendu n'est pas ce que je pense."
(Alan Greenspan)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th March 2024 - 04:39