如何找出定义给定函数的文件和行?
答案 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 +单击名称。