我刚开始关注Zend Framework 2(并且通常是ZF的新手),而在user guide中,他们在添加新模块时使用自动加载。不过,我觉得这个解释对于新手来说相当具有挑战性。他们模块目录,这其中包括包含下面的代码中加入了Module.php
文件:Zend Framework 2自动加载
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()
,但我不确定它的用途。使用选项来自动装载器实例化,但确切的是,我不确定。我猜数组的第二个条目指定在哪里找到模块名称空间的源文件 - 至少这是我的猜测。然而,我的第一个条目并不确定。在用户手册,它说以下内容:
我们正在开发中,我们并不需要通过类映射到加载网络LES, 所以我们提供了类映射自动加载一个空数组。
该文件只是返回一个空数组。我不知道这个ClassMapAutoloader的目的是什么。
对不起,如果我的观点不明确;基本上我试图找出getAutoloaderConfig()
中发生的事情以及mymodule/autoload_classmap.php
的用途。如果有人能够说明这一点,那将非常感谢!
Zend是如此过度设计其荒谬。 – wesside
绝对。但我认为,如果你找到了解决方法,它实际上非常强大。像Magento一样。 –
我在工作中使用它,它有起伏。不过我更喜欢Kohana,并使用我可能需要的任何Zend库。对不起@ andy124,还没有用过2,抱歉劫持你的问题。 – wesside