Как узнать, где определена функция?


Как я могу узнать, в каком файле и строке была определена данная функция?

8 87
php

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 ]
      }
    }
    

вам понадобится IDE, которая поддерживает функциональность "Open Function Declaration". Хорошим для php является Eclipse PDT.

чтобы найти определение функции, выделите имя функции, удерживая CTRL + нажмите на имя.