Чи є різниця між __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
Не впевнений, але він там існує вже досить давно (на сторінці магічних констант посібника сказано, що його поведінка була змінена в 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.