0

我试图理解 Easyblog(一个 Joomla 组件)中的一些 PHP 函数,我遇到了这些行:

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获取静态方法,但是在返回的静态函数数组中,我找不到这个“字段”函数。function fields(我还对整个应用程序进行了文本搜索,但没有找到任何相关内容。

现在这完全超出了我的理解。所以不允许我在这里发布EB定义类的整个文件,但是谁能向我解释为什么我的方法无法找到定义?可以在运行时动态创建静态函数吗?如果是这样,我该如何找到它?

4

0 回答 0