vscodeでxDebugつかってデバッグしてるときにハマったので備忘録。
間違いなどあれば教えて下さい![]()
現象
// ↓がtrueになるべきケースでもfalseしか返さない。
if ( file_exists( __DIR__ . '/hoge.php') ) {
}
原因
参考記事によれば、xDebugがデバッグ時にマジカル定数を動的に生成しているため。
デバッガを噛まさなければ、この問題は起きない。
__FILE__ は xdebug://debug-evalに評価されるし、
__DIR__ は xdebug:に評価される。
dirname(__FILE__) は xdebug:に評価される。
dirname(__DIR__) だと、期待するパスに評価される。
dirname(__DIR__)以外の解決方法としては、先に$dir = __DIR__;と代入してしまって、動的生成の影響を受けないようにする。
ただ、dirname(__DIR__)にしても、$dir = __DIR__;にしても、コードをパット見たところ冗長な感じはするし、デバッガの都合がコードの入り込むのは違和感しかないので、好きではないなー。
参考
php - xDebug weird __DIR__ constant - Stack Overflow
php - Uncaught exception 'ErrorException' in xdebug://debug-eval - Stack Overflow