最近当我使用 XDebug 调试一些 PHP 文件时(在 Ubuntu 上的 Eclipse 下)我遇到了一个奇怪的行为:
print(__FILE__);
结果
"xdebug eval"
哎呀!
所以这个魔法常量似乎不对此起作用。
有人知道修复方法或可行的解决方法吗?如何调试调试器? (硬编码路径是一个 PITA!)
最佳答案
您得到的输出是正确的。 __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
以便它可以实际调试到已评估的代码。
__FILE__
在 PHP 源代码中按预期工作,这一点可以证明:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>
关于php - 我怎样才能让 PHP 魔法常量 __FILE__ 与 Eclipse 和 PDT 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924676/