PHP,看看你的函数是如何被调用的

时间:2015-09-15 14:48:32

标签: php function

有没有办法可以在PHP函数中看到它是如何被激活的?作为陈述还是作为一种功能?

foo();
$bar = foo();

在函数foo()中,我想知道上面使用了哪两种方法。

3 个答案:

答案 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)

简短回答:不。

答案很长:不,就PHP而言,他们都被称为同样的方式。

您可以通过抛出异常或使用debug-backtrace来调试Trace,以调试调用函数的位置。

答案 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();

?>