我刚开始研究 Zend Framework 2(一般来说是 ZF 的新手),在用户指南中,他们在添加新模块时使用自动加载。然而,我发现这个解释对于一个菜鸟来说是相当具有挑战性的。他们正在Module.php
模块目录中添加一个文件,其中包含以下代码:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
现在我做了一些挖掘,试图弄清楚这个自动加载是怎么回事。据我了解,自动加载使用spl_autoload_register()
并且是一种避免require_once()
在代码中无处不在的方法。因此,当尝试使用未定义的类时,autoload()
将运行已注册的方法,该方法仅进行数组查找并包含如下所示的文件(如果已添加)。
// Zend/Loader/ClassMapAutoloader.php
public function autoload($class)
{
if (isset($this->map[$class])) {
require_once $this->map[$class];
}
}
由于性能,这似乎很聪明。我希望我刚才写的是正确的。基于此,我试图从第一个代码片段中弄清楚发生了什么getAutoloaderConfig()
,但我很困惑。似乎此方法返回的数组用于AutoloaderFactory::factory()
,但我不确定用于什么目的。似乎用选项实例化自动加载器,但具体是做什么的,我不确定。我猜数组的第二个条目指定了在哪里可以找到模块名称空间的源文件——至少这是我的猜测。然而,我不确定的第一个条目。在用户指南中,它说明了以下内容:
由于我们正在开发中,我们不需要通过类映射加载文件,因此我们为类映射自动加载器提供了一个空数组。
该文件只返回一个空数组。我不确定这个 ClassMapAutoloader 的目的是什么。
对不起,如果我的观点不清楚;基本上我试图弄清楚发生了什么getAutoloaderConfig()
以及mymodule/autoload_classmap.php
用于什么。如果有人可以对此有所了解,那将不胜感激!