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