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


122

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

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

Ответы:


189

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


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

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__: Каталог файла.
Если используется внутри включения, возвращается каталог включаемого файла.
Это эквивалентно dirname(__FILE__).
Это имя каталога не имеет косой черты, если это не корневой каталог.
(Добавлено в PHP 5.3.0.)


3
Не уверен, но он был там довольно давно (на странице с константами Magic в руководстве указано, что его поведение было изменено в PHP 4.0.2; поэтому я бы сказал, что он был там раньше)
Паскаль МАРТИН

3
DIR и dirname ( FILE ) всегда удаляют последнюю косую черту, верно?
nkkollaw

3
Правильно, кроме случаев, когда весь путь равен «/», и в этом случае они не удаляют это.
Франсиско Пресенсиа,

1
Не уверен, правильно ли я понял: dirname ( _FILE_ ) - самый быстрый, верно?
Джакомо Текя Пигани

7
@GiacomoTecyaPigani нет, __DIR__быстрее.
Нико
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.