Existe alguma diferença entre __DIR__ e dirname (__ FILE__) no PHP?

122

Parece o mesmo para mim, mas não tenho certeza,

porque existem muitos projetos que usa dirname(__FILE__).

user198729
fonte

Respostas:

189

O resultado deles é exatamente o mesmo ; então, nenhuma diferença nisso.


Por exemplo, as duas linhas a seguir:

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

Ambos fornecerão o mesmo resultado:

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


Mas, existem pelo menos duas diferenças:

  • __DIR__só existe com PHP> = 5.3
    • razão pela qual dirname(__FILE__)é mais amplamente usado
  • __DIR__ é avaliado em tempo de compilação, enquanto dirname(__FILE__) significa uma chamada de função e é avaliado em tempo de execução
    • então, __DIR__é (ou deveria ser) mais rápido.


Como referência, consulte a seção Constantes mágicas do manual (citando) :

__DIR__: O diretório do arquivo.
Se usado dentro de um include, o diretório do arquivo incluído é retornado.
Isso é equivalente a dirname(__FILE__).
Este nome de diretório não possui uma barra final, a menos que seja o diretório raiz.
(Adicionado no PHP 5.3.0.)

Pascal MARTIN
fonte
3
Não tenho certeza, mas está lá há algum tempo (a página de constantes mágicas do manual diz que seu comportamento foi modificado no PHP 4.0.2; então eu diria que já esteve lá antes)
Pascal MARTIN
3
DIR e dirname ( FILE ) sempre tiram a última barra, correto?
nkkollaw
3
Correto, exceto quando todo o caminho for "/", caso em que eles não o retiram.
Francisco Presencia
1
Não tenho certeza se entendi bem: dirname ( _FILE_ ) é o mais rápido, certo?
Giacomo Tecya Pigani
7
@GiacomoTecyaPigani não, __DIR__é mais rápido.
Nico