如何找出在哪个文件和行中定义了一个给定的函数?
我假设你所说的“描述”是指“定义”,为此,理想情况下,你需要一个可以做到这一点的像样的 IDE。
如果您使用像 Netbeans 这样的 IDE,您可以使用 CTRL + C 单击函数 use,它将带您到定义函数的位置,假设该文件位于您定义的项目文件夹中。
但是没有代码或函数可以这样做。
要么使用允许这样做的 IDE (我建议使用 Eclipse PDT) ,要么在 Linux 上使用 grep,或者使用 wingrep。在 Linux 中,它可能是这样的:
grep -R "function funName" *
从项目的根文件夹中。
You'll need an IDE that supports "Open Function Declaration" functionality. A good for for php is Eclipse PDT.
要查找函数定义,请突出显示函数名称,按住 CTRL + Click 按住该名称。
您也可以在 PHP 本身中这样做:
$reflFunc = new ReflectionFunction('function_name'); print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
下面是一个基本函数,它将扫描 整个项目文件中的特定字符串,并告诉您它在哪个文件中,以及它从哪个字符位置开始,只使用基本的 php。 希望这能帮到别人。
<?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; } ?>
我喜欢 Tom 的解决方案,所以我想我可以和 反射函数分享一些更多的技巧(它应该适用于每个 PHP5) :
打印文件名的一行程序:
print (new ReflectionFunction("foo"))->getFileName();
Please note that it won't show you the location for internal functions (such as _), but it still can print the API for it as below.
to print the definition and parameters of the function:
print new ReflectionFunction("foo");
例如:
$ php -r 'print new ReflectionFunction("_");' Function [ <internal:gettext> function _ ] { - Parameters [1] { Parameter #0 [ <required> $msgid ] } }
another way to check where does the function defined, try to redefine the function, PHP error system will simply returns an error told you where the function previously defined