出力は間違っていません。 __FILE__
は、パーサー時に評価される特別な定数です。スクリプトのソースだったにも関わらず
// test.php
<?php
"test.php";
?>
:
// test.php
<?php
__FILE__;
?>
これはパースした後、__FILE__
そのような「定数」がないことを意味するPHPスクリプトがコンパイルされるとき、それは本当にこのようなものを読んでいましたまったく置き換えられているからです。
これは、あなたがDBGpのeval
コマンドeval -- __FILE__
を通じて、IDEで行う場合、それは任意のファイル名であなたに__FILE__
を与えないことを意味します。代わりに、xdebug eval
またはそれ以降のバージョンのxdebug://debug-eval
である現在のコンテキストのファイル名を使用します。また、出力
php -r 'eval("__FILE__;");'
:本質的には
は、それがこれを行うのと同じです
Command line code(1) : eval()'d code
Xdebugのは形式のこの種を探し、それが実際にできることxdebug://debug-eval
にそれを変更evalされたコードにデバッグする。このスニペットを証明できるよう、PHPのソースコードで期待どおり
__FILE__
作品は:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>
マジック定数は変数ではなく、パーサによって展開されます。 – aexl