Kết quả bạn nhận được không chính xác. __FILE__
là một hằng số đặc biệt được đánh giá tại thời điểm phân tích cú pháp. Khi kịch bản PHP được biên dịch, nó sẽ thực sự đọc một cái gì đó như thế này:
// test.php
<?php
"test.php";
?>
mặc dù nguồn kịch bản là:
// test.php
<?php
__FILE__;
?>
Điều này có nghĩa rằng sau khi phân tích cú pháp, không có như vậy "liên tục" __FILE__
ở tất cả, vì nó đã được thay thế.
Điều này có nghĩa rằng nếu bạn làm trong một IDE, thông qua DBGp của eval
lệnh eval -- __FILE__
nó có thể không cung cấp cho bạn __FILE__
với bất kỳ tên tập tin. Thay vào đó, nó sử dụng tên tệp cho ngữ cảnh hiện tại là xdebug eval
hoặc trong các phiên bản sau, xdebug://debug-eval
.
Về bản chất, nó giống như làm điều này:
php -r 'eval("__FILE__;");'
nào cũng kết quả đầu ra:
Command line code(1) : eval()'d code
Xdebug trông cho loại định dạng, và thay đổi nó để xdebug://debug-eval
để nó có thể thực sự gỡ lỗi vào mã được đánh giá.
__FILE__
công trình như mong đợi trong mã nguồn PHP, như có thể chứng minh với đoạn này:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>
hằng số ma thuật không phải là biến, trình phân tích cú pháp mở rộng chúng. – aexl