PHPのマジック定数とdebug_backtrace()

著者:杉浦

PHPのマジック定数とdebug_backtrace()

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はバックトレースを生成する関数です。バックトレースの具体的な中身は次になります。

名前説明
functionstring カレントの関数名。 __FUNCTION__ も参照してください。
lineinteger カレントの行番号。 __LINE__ も参照してください。
filestring カレントのファイル名。 __FILE__ も参照してください。
classstring カレントのクラス名。 __CLASS__ も参照してください。
objectobject カレントのオブジェクト
typestring カレントのコール方式。メソッド呼び出しの場合は “->”、 静的なメソッド呼び出しの場合は “::” が返されます。 関数呼び出しの場合は何も返されません。
argsarray 関数の内部の場合、関数の引数のリストとなります。 インクルードされたファイル内では、 読み込まれたファイルの名前となります。

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'].');
    }
}
  • この記事いいね! (0)

著者について

杉浦 administrator