Contributing Advent 8: The magic __FILE__ constant
This issue came up in the #xdebug IRC channel on Freenode:
18:25 <user> no magic constants for PHP ? 18:27 <user> __FILE__ evaluates to "xdebug://debug-eval"
The user noticed this issue in the Eclipse expression evaluator. A similar issue is also described a few times on the internet:
With the hint in comment 2 in the first URL, I answered the report in an answer on StackOverflow (the third URL). I am repeating this answer (with some modifications) here:
The output you get is not incorrect. __FILE__ is a special constant that gets evaluated at parser time. In fact, even though it looks like a constant, it is really not. When the PHP script gets compiled, it would really read something like this:
// test.php
<?php
"test.php";
?>
even though the script source was:
// test.php
<?php
__FILE__;
?>
This means that after parsing, there is no such "constant" __FILE__ at all, as it has already been replaced.
This means that if you evaluate __FILE__ in an IDE, through DBGp's eval command with eval -- __FILE__ it can not return you a filename that is represented through the __FILE__ "constant". Instead, it uses the filename for the current context which is xdebug eval or in later versions, xdebug://debug-eval.
In essence, it's the same as doing this:
php -r 'eval("__FILE__;");'
Which also outputs:
Command line code(1) : eval()'d code
Xdebug looks for this sort of output format, and changes it to xdebug://debug-eval so that it can actually debug into eval'ed code.
__FILE__ works as expected in "normal" PHP source code, as can be proven with this snippet:
<?php $currentFilename = __FILE__; ?>
And after it has been assigned to a variable, you can evaluate $currentFilename in your IDE.
Life Line
Oystercatcher Parent and Chick
Standing on the edge of a lake in the Arundel Wetlands.
#birds #birdPhotography #Birdsoffediverse #Photography #Nature #Wildlife
Updated 2 main entrances
Fixed tagging and bollard location
I hiked 8.7km in 4h4m28s
Updated a restaurant
Updated a restaurant
Updated a restaurant
I walked 5.5km in 56m26s
Created an entrance
I walked 5.7km in 1h20m50s
Updated a fitness_centre; Confirmed a charging_station
I walked 4.0km in 47m13s
I walked 1.1km in 9m32s
Also, whatnow‽
`GET /icons/blank.gif HTTP/1.1" 200 398 "https://downloads.php.net/~windows/pecl/releases/?utm_source=chatgpt.com`
WTF does that need an `utm_source` for?
I sometimes wish cache expiries could be fuzzy, like 900±15 seconds. Y'know, to prevent the thundering herd effect.
Created a chemist shop
I walked 8.1km in 1h24m38s
Updated a bar
Created an entrance and a main entrance
I walked 5.8km in 1h30m43s
Merge branch 'xdebug_3_5'
Back to -dev
Go with 3.5.3
Go with 3.5.2
I walked 7.3km in 1h22m26s


Shortlink
This article has a short URL available: https://drck.me/adv1308-aex