Ответ 1
Вы также можете сделать это в самом PHP:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
Как узнать, в каком файле и строке определена определенная функция?
Вы также можете сделать это в самом PHP:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
Либо используйте среду IDE, которая позволяет это сделать (я бы рекомендовал Eclipse PDT), либо вы можете всегда ее использовать, если в Linux, или с помощью функции wingrep. В Linux это будет примерно так:
grep -R "function funName" *
из корневой папки проекта.
Если вы используете IDE, например Netbeans, вы можете CTRL + щелкнуть по функции, и она приведет вас к тому, где она определена, если файл находится в папке проекта, которую вы определили.
Здесь нет кода или функции.
Вот основная функция, которая сканирует ваши целые файлы проекта для определенной строки и сообщает вам, в каком файле она находится, а какая позиция char начинается с использования только базового 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;
}
?>
Я предполагаю, что под "описанным" вы подразумеваете "определенный". Для этого вам в идеале нужна достойная среда IDE, которая может это сделать.
Мне нравится решение 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 ]
}
}
другой способ проверить, где определена функция, попытаться переопределить эту функцию, система ошибок PHP просто вернет ошибку, сообщив вам, где ранее определенная функция
Вам понадобится IDE, поддерживающая функциональность "Open Function Declaration". Хорошим для php является Eclipse PDT.
Чтобы найти определение функции, выделите имя функции, нажмите CTRL + Нажмите на имя.