Как я могу узнать, в каком файле и строке определена определенная функция?
Вы также можете сделать это в самом PHP:
$reflFunc = new ReflectionFunction('function_name'); print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
Либо используйте среду IDE, которая позволяет это делать (я бы рекомендовал Eclipse PDT), либо вы можете всегда ее использовать, если в Linux или использовать wingrep. В Linux это будет примерно так:
grep -R "function funName" *
из корневой папки проекта.
Если вы используете IDE, например Netbeans, вы можете CTRL + щелкнуть по функции, и она приведет вас к тому, где она определена, если файл находится в папке проекта, которую вы определили.
Для этого нет никакого кода или функции.
Heres – основная функция, которая сканирует ваши файлы всего проекта на определенную строку и сообщает вам, в каком файле она находится, и какая позиция символа начинается с использования только базового 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; } ?>
к<?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; } ?>
Я предполагаю, что под «описанным» вы подразумеваете «определенный». Для этого вам в идеале нужна достойная среда IDE, которая может это сделать.
Мне нравится решение Тома, поэтому я подумал, что могу поделиться еще несколькими трюками с ReflectionFunction (он должен работать на каждом PHP 5):
однострочный шрифт для печати имени файла:
print (new ReflectionFunction("foo"))->getFileName();
Обратите внимание, что он не покажет вам местоположение для внутренних функций (например, _ ), но он все равно может распечатать API для него, как показано ниже.
для печати определения и параметров функции:
print new ReflectionFunction("foo");
Пример:
$ php -r 'print new ReflectionFunction("_");' Function [ <internal:gettext> function _ ] { - Parameters [1] { Parameter #0 [ <required> $msgid ] } }
еще один способ проверить, где определена функция, попытаться переопределить эту функцию, система ошибок PHP просто вернет ошибку, рассказав вам, где ранее определенная функция
Вам понадобится среда IDE, которая поддерживает функциональность «Open Function Declaration». Хорошим для php является Eclipse PDT.
Чтобы найти определение функции, выделите имя функции, нажмите CTRL + Нажмите на имя.