PHP Xdebug 覆盖 __Dir__ 和 __File__ 常量
PHP Xdebug Overrides __Dir__ and __File__ constant
在 VS 代码中使用“侦听 XDebug”调试 PHP 脚本时(PHP 通过 Felix Becker 扩展进行调试),我发现 __DIR__ and __File__
应该return 当前 运行 脚本的目录和文件名正在被 Xdebug 覆盖:
__DIR__ contains
"xdebug:"
__FILE__ contains
"xdebug://debug-eval"
但是,如果我将值分配给局部变量,它会按预期工作。
$dir = __DIR__; // $dir holds the correct path, instead of "xdebug:"
这里遇到了这个问题 Xdebug weird __DIR__ constant。
但是 post 是旧的,并且缺少对意外行为的足智多谋的解释。
感谢您的帮助。
您得到的输出没有错误。 __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 ?>
在 VS 代码中使用“侦听 XDebug”调试 PHP 脚本时(PHP 通过 Felix Becker 扩展进行调试),我发现 __DIR__ and __File__
应该return 当前 运行 脚本的目录和文件名正在被 Xdebug 覆盖:
__DIR__ contains
"xdebug:"
__FILE__ contains
"xdebug://debug-eval"
但是,如果我将值分配给局部变量,它会按预期工作。
$dir = __DIR__; // $dir holds the correct path, instead of "xdebug:"
这里遇到了这个问题 Xdebug weird __DIR__ constant。
但是 post 是旧的,并且缺少对意外行为的足智多谋的解释。
感谢您的帮助。
您得到的输出没有错误。 __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 ?>