彼此了解的物体

时间:2012-08-31 13:32:42

标签: php zend-framework

在Zend Framework中,Zend_Application对象有一个引导对象来引导或配置 components.Bootstrap类又可以访问zend_application对象来访问配置参数 我的问题是,这是一种什么样的模式,或者因为循环依赖而是一种代码味道。

1 个答案:

答案 0 :(得分:2)

Zend Framework 1臃肿,这是肯定的。

表示双向关系的$_application属性的原因是由于模块的独立引导文件。

我认为这很奇怪,因为在处理模块时,不是设置Zend_Aplication而是设置主要的引导程序:

/**
 * Set application/parent bootstrap
 *
 * @param  Zend_Application|Zend_Application_Bootstrap_Bootstrapper $application
 * @return Zend_Application_Bootstrap_BootstrapAbstract
 */
public function setApplication($application)
{
    if (($application instanceof Zend_Application)
        || ($application instanceof Zend_Application_Bootstrap_Bootstrapper)
    ) {
        if ($application === $this) {
            throw new Zend_Application_Bootstrap_Exception('Cannot set application to same object; creates recursion');
        }
        $this->_application = $application;
    } else {
        throw new Zend_Application_Bootstrap_Exception('Invalid application provided to bootstrap constructor (received "' . get_class($application) . '" instance)');
    }
    return $this;
}

还有很多代码味道:

/**
 * Constructor
 *
 * Sets application object, initializes options, and prepares list of
 * initializer methods.
 *
 * @param  Zend_Application|Zend_Application_Bootstrap_Bootstrapper $application
 * @return void
 * @throws Zend_Application_Bootstrap_Exception When invalid application is provided
 */
public function __construct($application)
{
    $this->setApplication($application);
    $options = $application->getOptions();
    $this->setOptions($options);
}

boostrap文件需要选项,因此它不是asking for the options,而是期望Zend_Application获得选项:

$options = $application->getOptions();
$this->setOptions($options);

看起来他们只是忽略setApplication()方法所期望的接口类型,它可以是以下之一:

  • Zend_Application
  • Zend_Application_Bootstrap_Bootstrapper
  • Zend_Application_Bootstrap_ResourceBootstrapper

我会放弃尝试理解这个烂摊子然后切换到ZF 2;)