Page 1 sur 1

Magic constants

Posté : 01 juin 2011, 15:36
par flo33
Bonjour,

J'ai une question qui peu paraître stupide mais je souhaiterais connaître l'avantage de l'utilisation des constantes magiques, comme par exemple "__DIRNAME__/img" plutôt que "./img" ?

Merci d'avance

Re: Magic constants

Posté : 01 juin 2011, 22:29
par Ryle
Ben.... les deux valeurs ne sont pas toujours identiques :)

Par exemple, "__DIR__" va te retourner le dossier dans lequel se trouve le fichier. Quand tu n'as qu'un seul fichier, cela va effectivement revenir au même qu'un "./" ... mais lorsque ton fichier va en inclure un autre, la valeur de __DIR__ va changer.

Par exemple, supposons que tu as un fichier A.php à la racine de ton site et deux fichiers B.php et C.php dans un répertoire "inc/" :

Code : Tout sélectionner

/A.php /inc/B.php /inc/C.php
Supposons que B ait besoin d'inclure le fichier C, pour inclure le fichier de façon relative, tu vas avoir un include "./C.php" dans B
Supposons maintenant que A ait besoin d'inclure le fichier B, tu vas avoir un include "./inc/B.php" dans A.

Le problème, c'est que lorsque c'est A qui s'exécute (et qu'il exécute donc le code de B comme s'il était inclus dans A), le chemin permettant d'inclure C devrait être "./inc/C.php" et non pas "./C.php", ce qui va générer une erreur.

Avec __DIR__, tu vas pouvoir récupérer l'emplacement du fichier inclus (et non pas du script principal qui est en train de s'exécuter). Supposons maintenant que dans B j'ai inclus le fichier C de la manière suivante : __DIR__ . "/C.php"
Si j'exécute B, __DIR__ équivaudra à un "./", tandis que si j'exécute A, il équivaudra à un "./inc/"

(Je ne sais pas si c'est très clair, mais l'idée c'est par exemple de pouvoir inclure des fichiers en cascade sans être obligé de les stocker tous dans le même répertoire :))