-1

次のコードがあります。

function abcdef() { }

function test($callback) {
    // I need the function name string("abcdef") here?
}

test(abcdef);

テスト関数内で関数名を取得することは可能ですか? では、無名関数はどうでしょうか?

4

2 に答える 2

2

これは以前に尋ねられました: PHP で呼び出し先を取得するにはどうすればよいですか?

必要な情報はdebug_backtaceで取得できます。ここに私が見つけた非常にきれいな関数があります:

<?php
/**
 * Gets the caller of the function where this function is called from
 * @param string what to return? (Leave empty to get all, or specify: "class", "function", "line", "class", etc.) - options see: http://php.net/manual/en/function.debug-backtrace.php
 */
function get_caller($what = NULL)
{
    $trace = debug_backtrace();
    $previousCall = $trace[2]; // 0 is this call, 1 is call in previous function, 2 is caller of that function

    if(isset($what)) {
        return $previousCall[$what];
    } else {
        return $previousCall;
    }   
}

そして、あなたは(かもしれません)それを次のように使用します:

<?php
function foo($full)
{
    if ($full) {
        return var_export(get_caller(), true);
    } else {
        return 'foo called from ' . get_caller('function') . PHP_EOL;
    }
}

function bar($full = false)
{
    return foo($full);
}

echo bar();
echo PHP_EOL;
echo bar(true);

どちらが返されますか:

foo called from bar

array (
  'file' => '/var/www/sentinel/caller.php',
  'line' => 31,
  'function' => 'bar',
  'args' =>
  array (
    0 => true,
  ),
)
于 2013-07-26T15:59:31.423 に答える
-2

function.name で試すことができます:

function abcdef() { }

function test($callback) {
    alert($callback.name)
}

test(abcdef);
于 2013-07-26T15:33:34.427 に答える