有没有办法可以在PHP函数中看到它是如何被激活的?作为陈述还是作为一种功能?
foo();
$bar = foo();
在函数foo()中,我想知道上面使用了哪两种方法。
答案 0 :(得分:0)
此代码可以为您提供帮助。
<?php
function foo() {
$debugStackTraceArray = debug_backtrace();
$debugStackTraceFunctionArray = null;
$calledMethod = null;
foreach($debugStackTraceArray as $key => $value) {
if (__FUNCTION__ == $value['function']) {
$debugStackTraceFunctionArray = $value;
break;
}
}
if ($debugStackTraceFunctionArray != null) {
$fileArray = file($debugStackTraceFunctionArray['file']);
$line = $fileArray[$debugStackTraceFunctionArray['line'] - 1];
if (strpos($line, '=') === false)
$calledMethod = 'function';
else
$calledMethod = 'statement';
if ($calledMethod != null)
var_dump($calledMethod);
}
return 'return';
}
foo();
$foo = foo();
?>
输出
string(9) "statement" string(8) "function"
答案 1 :(得分:-1)
答案 2 :(得分:-1)
感谢大家的反馈。确实可以使用debug_backtrace()函数。我现在正在使用以下构造。
<?php
function foo() {
$stack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
$file = file($stack[0]['file']);
$line = trim($file[$stack[0]['line']-1]);
if ( substr($line, 0, strlen(__FUNCTION__)) == __FUNCTION__ )
$statement = TRUE;
else
$statement = FALSE;
}
foo();
$foo = foo();
?>