哪里定义了php函数?

时间:2012-03-10 09:47:50

标签: php reflection

  

可能重复:
  How to find out where a function is defined?

我想知道(通过编程,可能通过反射API)定义了某个PHP函数。

4 个答案:

答案 0 :(得分:5)

ReflectionFunction课程中的内容看似相关(getFileNamegetStartLine等)。

(未测试的)

答案 1 :(得分:1)

debug_backtrace()将返回一个包含所有调用的数组,以及函数/方法的定义。反射类将为您提供函数的定义。

e.g。我使用它来记录旧项目中的已删除功能:

function logDeprecated() {
    $trail = debug_backtrace();
    if ($trail[1]['type']) {
        $function = new ReflectionMethod($trail[1]['class'], $trail[1]['function']);
    } else {
        $function = new ReflectionFunction($trail[1]['function']);
    }
    $errorMsg = 'Function ' . $trail[1]['function'];
    if ($trail[1]['class']) {
        $errorMsg .= ' of class ' . $trail[1]['class'];
    }
    $errorMsg .= ' is deprecated (called from ' . $trail[1]['file'] . '#' . $trail[1]['line'] . ', defined in ' . $function->getFileName() . '#' . $function->getStartLine() . ')';
        return $errorMsg;
}

答案 2 :(得分:1)

ReflectionMethod::getStartLine()
ReflectionMethod::getFileName()
ReflectionFunction::getStartLine()
ReflectionFunction::getFileName()

答案 3 :(得分:0)

可能它不是最佳解决方案,但如果你找不到任何东西,你可以使用grep命令找到函数位置,如果你使用的是linux。

exec('grep -irn "yourFunctionName" ./library', $response);
foreach ($response as $file) {
    list($filename, $line) = explode(":", $file);
}