如何找出定义函数的位置?

时间:2010-02-08 14:21:05

标签: php

如何找出定义给定函数的文件和行?

8 个答案:

答案 0 :(得分:213)

您也可以在PHP本身中执行此操作:

$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();

答案 1 :(得分:12)

使用允许这样做的IDE(我会推荐Eclipse PDT),或者如果在Linux上或使用wingrep,你总是可以使用它。在Linux中,它将类似于:

grep -R "function funName" *

从项目的根文件夹中。

答案 2 :(得分:3)

如果您使用像Netbeans这样的IDE,您可以按CTRL +单击该功能使用,它会将您带到定义的位置,假设该文件位于您定义的项目文件夹中。

虽然没有代码或功能可以做到这一点。

答案 3 :(得分:2)

这是一个基本功能,可以扫描您的整个项目文件以获取特定字符串,并告诉您它所在的文件以及仅使用基本php启动的char位置。 希望这有助于某人...

<?php 
$find="somefunction()";

echo findString('./ProjectFolderOrPath/',$find);

function findString($path,$find){
    $return='';
    ob_start();
    if ($handle = opendir($path)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if(is_dir($path.'/'.$file)){
                    $sub=findString($path.'/'.$file,$find);
                    if(isset($sub)){
                        echo $sub.PHP_EOL;
                    }
                }else{
                    $ext=substr(strtolower($file),-3);
                    if($ext=='php'){
                        $filesource=file_get_contents($path.'/'.$file);
                        $pos = strpos($filesource, $find);
                        if ($pos === false) {
                            continue;
                        } else {
                            echo "The string '$find' was found in the file '$path/$file and exists at position $pos<br />";
                        }
                    }else{
                        continue;
                    }
                }
            }
        }
        closedir($handle);
    }
    $return = ob_get_contents();
    ob_end_clean();
    return $return;
}
?>

答案 4 :(得分:2)

另一种检查函数定义在哪里的方法,尝试重新定义函数,PHP错误系统只会返回一个错误,告诉你以前定义的函数在哪里

答案 5 :(得分:1)

我认为“描述”是指“已定义”。为此,理想情况下,您需要一个可以做到的IDE。

答案 6 :(得分:1)

我喜欢Tom的解决方案,所以我想我可以与ReflectionFunction分享更多技巧(它应该适用于每个PHP 5):

  • 单行打印文件名:

    print (new ReflectionFunction("foo"))->getFileName();
    

请注意,它不会向您显示internal功能的位置(例如_),但它仍然可以为其打印API,如下所示。

  • 打印函数的定义和参数:

    print new ReflectionFunction("foo");
    

    示例:

    $ php -r 'print new ReflectionFunction("_");'
    Function [ <internal:gettext> function _ ] {
      - Parameters [1] {
        Parameter #0 [ <required> $msgid ]
      }
    }
    

答案 7 :(得分:-1)

您需要一个支持“开放功能声明”功能的IDE。 Eclipse PDT对PHP有利。

要查找函数定义,请突出显示函数名称,按住CTRL +单击名称。