Có sự khác biệt nào giữa __DIR__ và dirname (__ FILE__) trong PHP không?


122

Tôi trông giống nhau, nhưng tôi không chắc,

vì có nhiều dự án sử dụng dirname(__FILE__).

Câu trả lời:


189

Kết quả của họ là hoàn toàn giống nhau ; vì vậy, không có sự khác biệt về điều đó.


Ví dụ, hai dòng sau:

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

Cả hai sẽ cung cấp cùng một đầu ra:

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


Tuy nhiên, có ít nhất hai điểm khác biệt:

  • __DIR__chỉ tồn tại với PHP> = 5.3
    • đó là lý do tại sao dirname(__FILE__)được sử dụng rộng rãi hơn
  • __DIR__được đánh giá tại thời điểm biên dịch, trong khi dirname(__FILE__)có nghĩa là một lời gọi hàm và được đánh giá tại thời điểm thực thi
    • vì vậy, __DIR__(hoặc, nên) nhanh hơn.


Để tham khảo, hãy xem phần Hằng số ma thuật của sách hướng dẫn (trích dẫn) :

__DIR__: Thư mục của tệp.
Nếu được sử dụng bên trong bao gồm, thư mục của tệp được bao gồm sẽ được trả về.
Điều này tương đương với dirname(__FILE__).
Tên thư mục này không có dấu gạch chéo trừ khi nó là thư mục gốc.
(Đã thêm trong PHP 5.3.0.)


3
Không chắc chắn, nhưng nó đã ở đó khá lâu (trang Magic constants của hướng dẫn sử dụng cho biết bahavior của nó đã được sửa đổi trong PHP 4.0.2; vì vậy tôi sẽ nói rằng nó đã ở đó trước đây)
Pascal MARTIN

3
DIR và dirname ( FILE ) luôn bỏ dấu gạch chéo cuối cùng, đúng không?
nkkollaw

3
Đúng, ngoại trừ khi toàn bộ đường dẫn là "/", trong trường hợp đó chúng không loại bỏ điều đó.
Francisco Presencia

1
Tôi không chắc mình đã hiểu đúng: dirname ( _FILE_ ) là nhanh nhất, phải không?
Giacomo Tecya Pigani

7
@GiacomoTecyaPigani không, __DIR__nhanh hơn.
Nico
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.