デバッグ目的で、メソッドの呼び出された階層を取得したいときがあると思います。
PHPでは、Exceptionを生成してException::getTraceAsStringメソッドでStack Traceを取得する方法が簡単です。
下記にコードを示します。
<?php
function extractTrace($endLineNumber, $startLineNumber=1)
{
$stackTrace = (new \Exception())->getTraceAsString();
$start = strpos($stackTrace, "#".$startLineNumber);
$end = strpos($stackTrace, "\n#".($endLineNumber+1));
if($start !== false || $end !== false)
{
return substr($stackTrace, $start, ($end - $start + 1) ?: strlen($stackTrace));
}
return $stackTrace;
}
簡単な解説です。
- 引数でStack Traceを取得する範囲を指定できるようにしています。
- \Exceptionを生成した個所からStack Traceが生成されるので、Stack Traceの1行目の"#0"の部分を取り除くためにデフォルトでは、$startLineNumberを1に設定しています。
- $stackTrace = (new \Exception())->getTraceAsString();の部分を外部から引数で渡すのもありですが、毎回同じ処理を書く必要があるので、extractTrace関数内部に入れてあります。
コメント