El resultado que obtiene no es incorrecto. __FILE__
es una constante especial que se evalúa en el tiempo del analizador. Cuando el script PHP se compila, sería realmente leer algo como esto:
// test.php
<?php
"test.php";
?>
a pesar de que la fuente de guión era:
// test.php
<?php
__FILE__;
?>
Esto significa que después del análisis, no hay tal "constante" __FILE__
en absoluto, ya que ya ha sido reemplazado.
Esto significa que si lo hace en un entorno de desarrollo, a través de comandos de eval -- __FILE__
DBGp eval
puede no darle la __FILE__
con cualquier nombre de archivo. En su lugar, utiliza el nombre de archivo para el contexto actual que es xdebug eval
o en versiones posteriores, xdebug://debug-eval
.
En esencia, es lo mismo que hacer esto:
php -r 'eval("__FILE__;");'
Lo que también da salida:
Command line code(1) : eval()'d code
Xdebug busca este tipo de formato, y lo cambia a xdebug://debug-eval
de modo que pueda realmente depurar en el código evaluado.
__FILE__
funciona como espera en el código fuente de PHP, como se puede comprobar con este fragmento:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>
Las constantes mágicas no son variables, el analizador las expande. – aexl