Apakah ada perbedaan antara __DIR__ dan dirname (__ FILE__) di PHP?

122

Itu terlihat sama untukku, tapi aku tidak yakin,

karena masih banyak project yang menggunakan dirname(__FILE__).

pengguna198729
sumber

Jawaban:

189

Hasilnya persis sama ; jadi, tidak ada perbedaan tentang itu.


Misalnya, dua baris berikut:

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

Akankah keduanya memberikan hasil yang sama:

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


Namun, setidaknya ada dua perbedaan:

  • __DIR__hanya ada dengan PHP> = 5.3
    • itulah mengapa dirname(__FILE__)lebih banyak digunakan
  • __DIR__dievaluasi pada waktu kompilasi, sedangkan dirname(__FILE__)berarti panggilan fungsi dan dievaluasi pada waktu eksekusi
    • jadi, __DIR__adalah (atau, seharusnya) lebih cepat.


Sebagai referensi, lihat bagian Konstanta ajaib dari manual (mengutip) :

__DIR__: Direktori file.
Jika digunakan di dalam include, direktori dari file yang disertakan dikembalikan.
Ini sama dengan dirname(__FILE__).
Nama direktori ini tidak memiliki garis miring kecuali itu adalah direktori root.
(Ditambahkan dalam PHP 5.3.0.)

Pascal MARTIN
sumber
3
Tidak yakin, tetapi sudah ada cukup lama (halaman Konstanta ajaib dari manual mengatakan bahaviornya telah dimodifikasi dalam PHP 4.0.2; jadi saya akan mengatakan itu sudah ada sebelumnya)
Pascal MARTIN
3
DIR dan dirname ( FILE ) selalu hapus garis miring terakhir, benar?
nkkollaw
3
Benar, kecuali jika seluruh jalur adalah "/", dalam hal ini mereka tidak menghapusnya.
Francisco Presencia
1
Saya tidak yakin apakah saya mengerti dengan benar: dirname ( _FILE_ ) adalah yang tercepat, bukan?
Giacomo Tecya Pigani
7
@GiacomoTecyaPigani no, __DIR__lebih cepat.
Nico