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