我试图理解 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
定义类的整个文件,但是谁能向我解释为什么我的方法无法找到定义?可以在运行时动态创建静态函数吗?如果是这样,我该如何找到它?