PHP'de __DIR__ ve dirname (__ FILE__) arasında herhangi bir fark var mı?


122

Benim için aynı görünüyor ama emin değilim

çünkü kullanan birçok proje var dirname(__FILE__).

Yanıtlar:


189

Sonuçları tamamen aynıdır ; yani, bunda bir fark yok.


Örneğin, aşağıdaki iki satır:

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

İkisi de aynı çıktıyı verecek:

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


Ancak en az iki fark vardır:

  • __DIR__sadece PHP> = 5.3 ile mevcuttur
    • bu yüzden dirname(__FILE__)daha yaygın olarak kullanılıyor
  • __DIR__ derleme zamanında değerlendirilirken dirname(__FILE__) bir işlev çağrısı anlamına gelir ve yürütme zamanında değerlendirilir
    • böylece, __DIR__olduğu (ya da olmalıdır) daha hızlı.


Referans olarak, kılavuzun Sihirli sabitler bölümüne bakın (alıntı) :

__DIR__: Dosyanın dizini.
Bir içerme içinde kullanılırsa, dahil edilen dosyanın dizini döndürülür.
Bu eşdeğerdir dirname(__FILE__).
Bu dizin adının sonunda, kök dizin olmadığı sürece bölü çizgisi yoktur.
(PHP 5.3.0'da eklendi.)


3
Emin değilim, ama epeydir oradaydı (kılavuzun Sihirli sabitler sayfası, PHP 4.0.2'de bahavior'ın değiştirildiğini söylüyor; bu yüzden daha önce orada olduğunu söyleyebilirim)
Pascal MARTIN

3
DIR ve dizin adı ( FILE ) her zaman son bölü çizgisini çıkarır, doğru mu?
nkkollaw

3
Doğru, tüm yolun "/" olması dışında, bu durumda onu çıkarmazlar.
Francisco Presencia

1
Doğru anladığımdan emin değilim: dirname ( _FILE_ ) en hızlısı, değil mi?
Giacomo Tecya Pigani

7
@GiacomoTecyaPigani hayır, __DIR__daha hızlı.
Nico
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.