debug_backtrace()の呼び出し元の行数について

debug_backtrace()の行数についてちょっとした勘違い・・・

作成日:2020-12-02, 更新日:2020-12-02

基本

debug_backtrace()を呼び出した関数だったり行数が取得できる

めも

・クラスじゃないなら呼び出し元の行数は「0」
・クラスなら呼び出し元の行数は「1」
・・・説明しづらいので、サンプルと結果

debug_backtrace()を整形する関数をひとまず用意

function fix_dTrace($dbg) {
  foreach ( $dbg as $row ) {
    $pre = '';
    $pre .= ( array_key_exists('class', $row) )?    $row['class']: '';
    $pre .= ( array_key_exists('type', $row) )?     $row['type']: '';
    $pre .= ( array_key_exists('function', $row) )? $row['function'].'()': '';
    $pre .= ( array_key_exists('line', $row) )?     ', line='.$row['line']: '';
    echo $pre . '<br>';
  }
}

関数を呼び出し

01: <?php
02: function dTrace() {
03:   return debug_backtrace();
04: }
05: fix_dTrace(dTrace());
// dTrace(), line=5

クラス内のメソッドを呼び出し

01: <?php
02: class ori {
03:   function dTrace() {
04:     return debug_backtrace();
05:   }
06: }
07: $ori = new ori();
08: $dbg = $ori->dTrace();
// ori->dTrace(), line=8

クラス内のメソッドからメソッドを呼び出し

01: <?php
02: class ori {
03:   function dTrace() {
04:     return debug_backtrace();
05:   }
06:
07:   function run() {
08:     return $this->dTrace();
09:   }
10: }
11: $ori = new ori();
12: $dbg = $ori->run();
// ori->dTrace(), line=8
// ori->run(), line=12

呼び出し元の情報について勘違いしていた・・・
求めていたのは・・・「ori->dTrace()」は「8行目で、run()の中から呼び出している」という情報。
「ori->run(), line=8」という結果が欲しかった。
そのままだと求めている結果にはならないというコトが分かっただけでOKとしよう・・・