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

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

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

Ответ 1

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


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

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.)