ペチパーノート

WEB開発系Tipsブログです。

呼び出し元の情報を取得する

関数の中で関数を呼んでさらに・・・
で結局どういう流れで呼ばれてるの?うぉー帰りたい!!
ってことあります。

そんなときはdebug_backtrace()です。

test.php

<?php
function speak($word) {
    tell($word);
}

function tell($word) {
    propagate($word);
}

function propagate($word) {
    echo $word;
    print_r(debug_backtrace());
}

speak('これはテストです');

ブラウザの出力

これはテストです
Array
(
    [0] => Array
        (
            [file] => /var/www/html/test.php
            [line] => 7
            [function] => propagate
            [args] => Array
                (
                    [0] => これはテストです
                )

        )

    [1] => Array
        (
            [file] => /var/www/html/test.php
            [line] => 3
            [function] => tell
            [args] => Array
                (
                    [0] => これはテストです
                )

        )

    [2] => Array
        (
            [file] => /var/www/html/test.php
            [line] => 15
            [function] => speak
            [args] => Array
                (
                    [0] => これはテストです
                )

        )

)

今回は1ファイルに複数の関数を記述して実行していますが
共通関数ファイル等を読み込み、その中の関数を実行する場合でも有効です。