【问题标题】:Initializing the Front Controller, what's the difference between these two初始化前端控制器,这两者有什么区别
【发布时间】:2010-11-09 13:09:18
【问题描述】:

我正在查看我在过去 2 个月中为 Zend 编写的一些代码,我发现在初始化前端控制器时有些不一致(因为我是初学者)。

我发现有时我会这样做

$frontController = Zend_Controller_Front::getInstance();

其他时候我也这样做过

$this->bootstrap('FrontController');
$frontController = $this->getResource('FrontController');

不知道我在想什么。我想我可能正在遵循示例。有人知道这两者之间是否有任何真正的区别?

【问题讨论】:

    标签: php zend-framework bootstrapping


    【解决方案1】:

    一个是对 Singleton 对象的调用,它可以从任何地方获取。另一个是调用应用程序引导程序,以检索名为“FrontController”的资源。

    理论上,名为“FrontController”的资源可以是任何分配给具有该名称的引导程序的资源,例如自定义前端控制器实现,如果您不想使用 Zend 的话。

    实际上,它们都检索Zend_Controller_Front 实例。

    【讨论】:

    • 前端控制器在 Zend 中总是一个单例。即使使用应用程序引导程序,资源也会使用getInstance 调用它。见Zend_Application_Resource_Frontcontroller::getFrontController
    • @netcode,我知道这是一个单例。问我问题的一个更清晰的方法是:是否需要初始化单例,或者 getInstance 负责初始化实例(如果它为空)。
    • 在这种情况下,getInstance 负责初始化实例(如果它为空)。但总的来说,不一定。单例模式本身并没有定义实例是否必须在首次使用时自动初始化。但是,这样做的做法通常称为 lazy-loaded singletonInitialization on Demand Holder 模式。
    【解决方案2】:
    Zend_Controller_Front::getInstance()
    

    第一种方法是直接调用 Zend_Controller_Front

    $this->bootstrap('FrontController');
    $frontController = $this->getResource('FrontController');
    

    第二种方法使用 Zend_ApplicationZend_Application_Bootstrap_ResourceBootstrapper。在初始化 Zend_Application 时,它会注册 FrontController 资源,然后在您的引导文件中使用 $this->bootstrap 调用对其进行初始化。

    虽然后一种方法需要 Zend_Application 和 Zend_Controller,但第一种方法只依赖于 Zend_Controller。

    【讨论】:

      【解决方案3】:

      我认为这是两个同类;-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 2016-09-07
        • 2011-02-14
        • 1970-01-01
        • 2011-04-06
        相关资源
        最近更新 更多