¿Hay alguna diferencia entre __DIR__ y dirname (__ FILE__) en PHP?

122

A mí me parece lo mismo, pero no estoy seguro

porque hay muchos proyectos que utiliza dirname(__FILE__).

user198729
fuente

Respuestas:

189

Su resultado es exactamente el mismo ; entonces, no hay diferencia en eso.


Por ejemplo, las dos siguientes líneas:

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

Ambos darán el mismo resultado:

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


Pero hay al menos dos diferencias:

  • __DIR__solo existe con PHP> = 5.3
    • por eso dirname(__FILE__)se usa más
  • __DIR__ se evalúa en tiempo de compilación, mientras que dirname(__FILE__) significa una llamada a función y se evalúa en tiempo de ejecución
    • entonces, __DIR__es (o debería ser) más rápido.


Como, como referencia, consulte la sección de constantes mágicas del manual (citando) :

__DIR__: El directorio del archivo.
Si se usa dentro de una inclusión, se devuelve el directorio del archivo incluido.
Esto es equivalente a dirname(__FILE__).
Este nombre de directorio no tiene una barra al final a menos que sea el directorio raíz.
(Agregado en PHP 5.3.0.)

Pascal MARTIN
fuente
3
No estoy seguro, pero ha estado ahí durante bastante tiempo (la página de constantes de Magic del manual dice que su comportamiento ha sido modificado en PHP 4.0.2; así que diría que ha estado ahí antes)
Pascal MARTIN
3
DIR y dirname ( FILE ) siempre quitan la última barra, ¿correcto?
nkkollaw
3
Correcto, excepto cuando toda la ruta es "/", en cuyo caso no lo quitan.
Francisco Presencia
1
No estoy seguro de haber entendido correctamente: dirname ( _FILE_ ) es el más rápido, ¿verdad?
Giacomo Tecya Pigani
7
@GiacomoTecyaPigani no, __DIR__es más rápido.
Nico