次のコードがあります。
function abcdef() { }
function test($callback) {
// I need the function name string("abcdef") here?
}
test(abcdef);
テスト関数内で関数名を取得することは可能ですか? では、無名関数はどうでしょうか?
これは以前に尋ねられました: 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,
),
)
function.name で試すことができます:
function abcdef() { }
function test($callback) {
alert($callback.name)
}
test(abcdef);