Відповіді:
Ви також можете це зробити в самому PHP:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Або використовуйте IDE, який дозволяє це робити (я б рекомендував Eclipse PDT), або ви завжди можете його схрестити, якщо в Linux, або використовуючи wingrep. У Linux це було б щось на кшталт:
grep -R "function funName" *
з кореневої папки проекту.
Якщо ви використовуєте IDE, подібний Netbeans, ви можете CTRL + Клацнути функцію використання, і вона переведе вас туди, де вона визначена, якщо припустити, що файл знаходиться у визначеній вами папці проекту.
Немає жодного коду чи функції, щоб це зробити.
Я припускаю, що під "описаним" ви маєте на увазі "визначений". Для цього вам ідеально потрібна гідна IDE, яка може це зробити.
Ось основна функція, яка скануватиме всі ваші файли проекту на певний рядок і скаже вам, у якому файлі він знаходиться і в якому положенні 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;
}
?>
Мені подобається рішення Тома, тому я подумав, що зможу поділитися ще трьома хитрощами з 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 ]
}
}
$reflFunc->isInternal() === TRUE
означає -> getFileName () і -> getStartLine () поверне FALSE.