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

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.