PHP: используемую статическую функцию нигде нет в определении класса. Как мне ее найти? - PullRequest
0 голосов
/ 02 декабря 2019

Я пытался понять некоторые функции PHP в Easyblog (компонент Joomla), я наткнулся на следующие строки:

public function getDisplay(EasyBlogPost &$post)
{
    $fields = EB::fields();

    // I inject the following 4 lines in order to find where static function "fields" was defined
    $sss = new ReflectionClass('EB'); 
    var_dump($sss->getMethod('fields');
    var_dump($sss->getMethods(ReflectionMethod::IS_STATIC));
    var_dump($sss->getMethod('init'); 

    $field = $fields->get($this->type);

    return $field->display($this, $post);
}

Я пытался найти определение статической функции fields. Мне удалось найти файл, в котором определен класс EB, первые строки выглядят так:

class EB
{
    public static $headersLoaded = array();

    /**
     * Initializes EasyBlog's javascript framework
     *
     * @since   5.1
     * @access  public
     */
    public static function init($section = 'site')
    {
        // Determines if we should compile the javascripts on the site
        $app = JFactory::getApplication();
        $input = $app->input;
        $compile = $input->get('compile', false, 'bool');
    ....

Но в этом файле нет такой функции, которая называется fields, и, как вы можете видеть,класс EB не наследует и не реализует какой-либо другой класс. Затем я использую ReflectionClass, но var_dump($sss->getMethod('fields'); возвращает сообщение об ошибке «нет полей метода», тогда как var_dump($sss->getMethod('init'); возвращает информацию о статической функции (init), определенной в файле. Также я попытался var_dump($sss->getMethods(ReflectionMethod::IS_STATIC)); в соответствии с PHP получить статические методы , но среди возвращенного массива статических функций я не могу найти эту функцию "fields". Я также выполнил поиск по тексту function fields( по всему приложению, но ничего связанного не было найдено.

Теперь это совершенно за пределами моего понимания. ТАК не позволил бы мне публиковать здесь весь файл, где определен класс EB, но кто-нибудь может объяснить мне, почему мой подход не находит определение? Можно ли динамически создавать статическую функцию во время выполнения? Если да, то как мне его найти?

...