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