なんでこんな技が必要になるのか、とかそういうのを考えない世界にしたい(決意)
方法
みんな大好き set_error_handler()
PHP: set_error_handler - Manual
<?php // 本命の関数 function after_call_undefined_varibale($name, $file, $line) { var_dump("\${$name} at {$file}:{$line}"); } // 本命の関数を実行するための handler function after_call_undefined_varibale_callback($errno, $errstr, $errfile, $errline) { // set_error_handler() の第二引数で指定してるなら要らないかも if ($errno !== E_NOTICE) { return false; } $pattern = '/^Undefined variable: (.*)$/'; $matches = array(); if (!preg_match($pattern, $errstr, $matches)) { return false; } after_call_undefined_varibale($matches[1], $errfile, $errline); return false; } set_error_handler("after_call_undefined_varibale_callback", E_NOTICE); /** * Example Output: * * string '$usernmae at /path/to/user.php:3' (length=32) */
まとめ
__get()
のグローバルスコープ版みたいなの、探せばありそうな気もするけど触れてはいけない領域だと思う。