Есть ли разница между __DIR__ и dirname (__ FILE__) в PHP?

Для меня это выглядит одинаково, но я не уверен,

потому что есть много проектов, которые используют dirname(__FILE__) .

Их результат точно такой же ; поэтому нет никакой разницы в этом.

Например, две следующие строки:

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

Оба будут давать одинаковый результат:

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

Но есть, по крайней мере, две отличия:

  • __DIR__ существует только с PHP> = 5.3
    • поэтому dirname(__FILE__) более широко используется
  • __DIR__ оценивается во время компиляции, тогда как dirname(__FILE__) означает вызов функции и оценивается во время выполнения
    • поэтому, __DIR__ – это (или должно быть) быстрее.

Как в качестве ссылки, см. Раздел « Магические константы » руководства (цитирование) :

__DIR__ : каталог файла.
Если используется внутри include, возвращается каталог включенного файла.
Это эквивалентно dirname(__FILE__) .
Это имя каталога не имеет завершающей косой черты, если это не корневая директория.
(Добавлено в PHP 5.3.0.)