如何让PHP魔术常量__FILE__与Eclipse和PDT一起使用

gee*_*lin 10 php eclipse xdebug

最近,当我用XDebug调试一些PHP文件时(在Ubuntu上的Eclipse下),我遇到了一个奇怪的行为:

print(__FILE__);
Run Code Online (Sandbox Code Playgroud)

结果

"xdebug eval"
Run Code Online (Sandbox Code Playgroud)

GEE!

所以这个神奇的常数似乎适用于此.

任何人都知道修复或可行的解决方法?如何调试调试器?(硬编码路径是PITA!)

Der*_*ick 7

你得到的输出不正确.__FILE__是一个在解析器时间得到的特殊常量.当PHP脚本被编译时,它会真正读取如下内容:

// test.php
<?php
    "test.php";
?>
Run Code Online (Sandbox Code Playgroud)

即使脚本源是:

// test.php
<?php
    __FILE__;
?>
Run Code Online (Sandbox Code Playgroud)

这意味着在解析之后,根本没有这样的"常量" __FILE__,因为它已被替换.

这意味着如果你在IDE中,通过DBGp的eval命令,eval -- __FILE__不能给你__FILE__任何文件名.相反,它使用当前上下文的文件名,该文件名是xdebug eval或在以后的版本中xdebug://debug-eval.

从本质上讲,它与执行此操作相同:

php -r 'eval("__FILE__;");'
Run Code Online (Sandbox Code Playgroud)

其中还输出:

Command line code(1) : eval()'d code
Run Code Online (Sandbox Code Playgroud)

Xdebug查找这种格式,并将其更改为xdebug://debug-eval可以实际调试为eval的代码.

__FILE__ 在PHP源代码中按预期工作,可以使用此代码段证明:

<?php $far = __FILE__; // now evaluate $far in your IDE ?>
Run Code Online (Sandbox Code Playgroud)


Ish*_*Ish -1

在线创建断点print(__FILE__);并分析哪些变量可供您使用。