PHP: 自動的に定義される定数 – Manual
PHPには自動的に定義される定数であるマジック定数があります。この中のうち __FILE__, __LINE__, __CLASS__, __FUNCTION__ に注目します。これらの定数はそれぞれ呼び出された時点のファイルのパスと名前、ファイルの行番号、クラス名、関数名を返します。これを用いると例えば、
assert($a < $b, 'error in' . __FILE__ . '\'s line ' . __LINE__ . '. $a is less than $b.$a:'.$a.' $b:'.$b);
の様にどこでエラーが起きたのか通知できるようになります。
PHP: debug_backtrace – Manual
debug_backtraceはバックトレースを生成する関数です。バックトレースの具体的な中身は次になります。
名前 | 型 | 説明 |
---|---|---|
function | string | カレントの関数名。 __FUNCTION__ も参照してください。 |
line | integer | カレントの行番号。 __LINE__ も参照してください。 |
file | string | カレントのファイル名。 __FILE__ も参照してください。 |
class | string | カレントのクラス名。 __CLASS__ も参照してください。 |
object | object | カレントのオブジェクト。 |
type | string | カレントのコール方式。メソッド呼び出しの場合は “->”、 静的なメソッド呼び出しの場合は “::” が返されます。 関数呼び出しの場合は何も返されません。 |
args | array | 関数の内部の場合、関数の引数のリストとなります。 インクルードされたファイル内では、 読み込まれたファイルの名前となります。 |
PHP: debug_backtrace – Manual より引用
この中には__FILE__, __LINE__, __CLASS__, __FUNCTION__を含め、重要な情報が格納されています。debug_backtraceを用いることによって、どこからでも先立って起きたエラー時点の状態をさかのぼって知ることが出来ます。例えば、エラー例外をキャッチする部分にログを記述するなど便利です。
class Handler extends ExceptionHandler { /** * Report or log an exception. * * @param \Exception $exception * @throws Exception * @return void */ public function report(Exception $exception) { parent::report($exception); $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); Log::error('error in' . $trace[0]['file'] . '\'s line ' . $trace[0]['line'].'); } }