PHP メソッドや関数の呼び出し元を調べる方法
debug_backtrace()を使ってまとめて取得する方法
デバッグ用のメソッドや関数だったり、ログに出力された内容から該当処理を見つけたいときなど、
ある処理がどこから呼び出されているのか知りたいときがあります。
もともと PHP に用意されている「debug_backtrace()」関数を使用することで、呼び出し元のファイルやクラス名、関数、メソッド名を取得することができます。
function foo() {
$dbg = debug_backtrace();
var_dump($dbg);
}
「debug_backtrace()」の結果は連想配列になっていますので、必要な情報をキー指定で取得できます。
各キーの情報は下記のとおりです。
- function・・・関数名が格納されています。
- line・・・行番号が格納されています。
- file・・・ファイル名が格納されています。
- class・・・クラス名が格納されています。
- object・・・オブジェクトが格納されています。
- type・・・コール方式が格納されています。 ※メソッドの場合は “->"、 静的メソッドの場合は “::” 、関数の場合は空になっています。
- args・・・関数の引数のリストが格納されています。
また、この構造で複数データが格納された状態になっていますので、URL にアクセスしてから呼び出されたすべてのファイル、クラス、メソッドをたどっていくことが可能です。
下記のようなコードなら、最初に呼び出された処理までさかのぼって表示することができます。
function foo() {
$dbg = debug_backtrace();
foreach ($dbg as $dbgrow) {
echo $dbgrow['file'];
}
}
自動的に定義される定数を使ってピンポイントで取得する方法
下記の、__FUNCTION__
定数を使用すれば、呼び出した場所の関数名、行番号、ファイル名、クラス名を取得できます。
# 関数名、メソッド名を取得
echo __FUNCTION__;
# 行番号を取得
echo __LINE__;
# ファイル名を取得
echo __FILE__;
# クラス名を取得
echo __CLASS__;
まとめ
この様な処理をうまく利用すれば、デバッグの効率も良くなりそうですし、ログに記載する内容もより効果的な内容になりそうです。