Y a-t-il une différence entre __DIR__ et dirname (__ FILE__) en PHP?

122

Cela me ressemble, mais je ne suis pas sûr,

car il existe de nombreux projets qui utilisent dirname(__FILE__).

user198729
la source

Réponses:

189

Leur résultat est exactement le même ; donc, pas de différence là-dessus.


Par exemple, les deux lignes suivantes:

var_dump(dirname(__FILE__));
var_dump(__DIR__);

Les deux donneront le même résultat:

string '/home/squale/developpement/tests/temp' (length=37)


Mais, il y a au moins deux différences:

  • __DIR__existe uniquement avec PHP> = 5.3
    • c'est pourquoi dirname(__FILE__)est plus largement utilisé
  • __DIR__est évalué au moment de la compilation, tandis que dirname(__FILE__)signifie un appel de fonction et est évalué au moment de l'exécution
    • donc, __DIR__est (ou devrait être) plus rapide.


Comme référence, consultez la section Constantes magiques du manuel (citant) :

__DIR__: Le répertoire du fichier.
S'il est utilisé dans un include, le répertoire du fichier inclus est renvoyé.
C'est équivalent à dirname(__FILE__).
Ce nom de répertoire n'a pas de barre oblique à la fin, sauf s'il s'agit du répertoire racine.
(Ajouté en PHP 5.3.0.)

Pascal MARTIN
la source
3
Pas sûr, mais il existe depuis un certain temps (la page des constantes magiques du manuel indique que son comportement a été modifié en PHP 4.0.2; je dirais donc qu'il y est déjà arrivé)
Pascal MARTIN
3
DIR et dirname ( FILE ) suppriment toujours la dernière barre oblique, correct?
nkkollaw
3
Correct, sauf lorsque le chemin complet est "/", auquel cas ils ne le suppriment pas.
Francisco Presencia
1
Je ne suis pas sûr d'avoir bien compris: dirname ( _FILE_ ) est le plus rapide, non?
Giacomo Tecya Pigani
7
@GiacomoTecyaPigani non, __DIR__c'est plus rapide.
Nico