在使用 VS 代碼(Felix Becker 擴展的 PHP 除錯)中的“偵聽 XDebug”除錯 PHP 腳本時,我發現__DIR__ and __File__應該回傳當前運行腳本的目錄和檔案名的那些被 Xdebug 覆寫:
__DIR__ contains
"xdebug:"
__FILE__ contains
"xdebug://debug-eval"
但是,如果我將值分配給區域變數,它會按預期作業。
$dir = __DIR__; // $dir holds the correct path, instead of "xdebug:"
這個問題在這里遇到了Xdebug 奇怪的 __DIR__ 常量。
但是,該帖子很舊,并且缺少對意外行為的足智多謀解釋。
感謝您的幫助。
uj5u.com熱心網友回復:
你得到的輸出是不正確的。__FILE__是在決議器時計算的特殊常量。當 PHP 腳本被編譯時,它會真正讀取如下內容:
// test.php
<?php
"test.php";
?>
即使腳本源是:
// test.php
<?php
__FILE__;
?>
這意味著在決議之后,根本沒有這樣的“常量” __FILE__,因為它已經被替換了。
這意味著如果您在 IDE 中進行操作,則通過 DBGp 的eval命令eval -- __FILE__它無法為您__FILE__提供任何檔案名。相反,它使用當前背景下是檔案名xdebug eval或更高版本,xdebug://debug-eval。
本質上,它與這樣做相同:
php -r 'eval("__FILE__;");'
它還輸出:
Command line code(1) : eval()'d code
Xdebug 尋找這種格式,并將其更改為,xdebug://debug-eval以便它可以實際除錯到 eval'ed 代碼中。
__FILE__ 在 PHP 源代碼中按預期作業,這可以通過以下代碼段證明:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/357410.html
