【发布时间】:2012-09-07 02:14:35
【问题描述】:
我刚开始研究 Zend Framework 2(而且对 ZF 来说一般都是新手),在 user guide 中,他们在添加新模块时使用自动加载。然而,我发现这个解释对于一个菜鸟来说是相当具有挑战性的。他们正在模块目录中添加一个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];
}
}
由于性能,这似乎很聪明。我希望我刚才写的是正确的。基于此,我试图从第一个代码 sn-p 中弄清楚getAutoloaderConfig() 中发生了什么,但我很困惑。似乎此方法返回的数组用于AutoloaderFactory::factory(),但我不确定用于什么目的。似乎用选项实例化自动加载器,但具体是做什么的,我不确定。我猜数组的第二个条目指定了在哪里可以找到模块名称空间的源文件——至少这是我的猜测。然而,我不确定的第一个条目。在用户指南中,它说如下:
由于我们处于开发阶段,我们不需要通过类映射加载文件, 所以我们为类映射自动加载器提供了一个空数组。
文件只返回一个空数组。我不确定这个 ClassMapAutoloader 的目的是什么。
对不起,如果我的观点不清楚;基本上我想弄清楚getAutoloaderConfig() 中发生了什么以及mymodule/autoload_classmap.php 的用途。如果有人能对此有所了解,那将不胜感激!
【问题讨论】:
-
Zend 的设计太过于荒谬了。
-
当然。但我认为,如果你找到解决方法,它实际上真的很强大。像 Magento。
-
我在工作中使用它,它有起有落。不过我更喜欢 Kohana,并使用我可能需要的任何 Zend 库。抱歉@andy124,还没用过2,不好意思劫持了你的问题。
-
ZF2 与 ZF1 完全不同,至少在将其用作应用程序时是这样。不确定我是否喜欢它,但我正在努力学习它。
-
@wes 别担心。我实际上同意你的看法,即使我还是新手。学习曲线就像攀登珠穆朗玛峰,尤其是使用 ZF2。 ZF1 似乎更简单,尽管它有缺陷。我对 ZF2 的最初印象是有人在想“嘿,这会超级酷”,而不是让事情变得更简单。追求完美和专业发展并没有错,但从 ZF1 到 ZF2 似乎在使用起来很容易方面发生了根本性的变化。话虽如此,我确实喜欢关注 ZF2 和命名空间中的模块。
标签: php zend-framework2 zend-autoloader