Drupal如何通过模块处理类的自动加载?例如,如果我有一个“事件”模块,并且声明了一个名为“事件”的类,然后在.info文件中包括了该类文件,该如何注册?
问题是我试图动态获取包含所有已加载类名称的数组。get_declared_classes()不会以这种方式返回我声明的所有类的名称,因此我假设它们以某种方式自动加载。遵循另一个堆栈溢出问题的建议,我尝试使用spl_autoload_functions()获得所有建议,但这也不成功。
有任何想法吗?
Drupal如何通过模块处理类的自动加载?例如,如果我有一个“事件”模块,并且声明了一个名为“事件”的类,然后在.info文件中包括了该类文件,该如何注册?
问题是我试图动态获取包含所有已加载类名称的数组。get_declared_classes()不会以这种方式返回我声明的所有类的名称,因此我假设它们以某种方式自动加载。遵循另一个堆栈溢出问题的建议,我尝试使用spl_autoload_functions()获得所有建议,但这也不成功。
有任何想法吗?
Answers:
spl_autoload_functions()
返回已在中注册的自动加载功能列表spl_autoload_register()
。Drupal注册了两个自动加载功能:一个用于类(drupal_autoload_class()),另一个用于接口(drupal_autoload_interface())。
这两个函数都使用_registry_check_code() ; 使用其代码,您可以编写一个列出Drupal 7模块实现的所有类的函数。
我发现,当我开始运行模块时,在信息文件中声明我的包含文件不会使它们被识别。如果我在文件event.inc中有一个类Event。但在模块中创建对象时,该对象无法识别。我添加线
include_once ('CMatArticleHandler.inc');
在$ variable = new event()之前;线。我在这方面是新手,所以可能还有更多,但到目前为止,它已经奏效了。