初始化前端控制器,这两个有什么区别
问题描述:
我正在查看一些我在过去2个月为Zend编写的代码,并且在初始化过程中发现了一些不一致(因为我是初学者)前端控制器。初始化前端控制器,这两个有什么区别
我看,有时我做这个
$frontController = Zend_Controller_Front::getInstance();
和其他时间我做这个
$this->bootstrap('FrontController');
$frontController = $this->getResource('FrontController');
不知道我在想什么。我想我可能是下面的例子。任何人都知道这两者之间是否有真正的区别?
答
一个是对Singleton对象的调用,它可以从任何地方获取。另一个是对应用程序引导程序的调用,以检索名为“FrontController”的资源。
从理论上讲,名为'FrontController'的资源可以是任何分配给具有该名称的引导程序的资源,比如自定义前端控制器实现,如果您不喜欢使用Zend的话。
实际上,它们都检索Zend_Controller_Front
实例。
答
我认为这是两个同类型的;-)
答
Zend_Controller_Front::getInstance()
第一种方法是直接调用前端控制器的。
$this->bootstrap('FrontController');
$frontController = $this->getResource('FrontController');
第二种方法使用Zend_Application与Zend_Application_Bootstrap_ResourceBootstrapper。初始化Zend_Application时,它会注册FrontController资源,然后在引导文件中使用$this->bootstrap
调用进行初始化。
虽然后一种方法将需要Zend_Application和Zend_Controller,但第一种方法仅依赖于Zend_Controller。
Zend中的前端控制器始终是单例。即使在使用应用程序引导程序时,资源也会使用'getInstance'调用它。参见'Zend_Application_Resource_Frontcontroller :: getFrontController'。 – netcoder 2010-11-09 13:54:52
@netcode,我明白这是一个单身人士。一个更清晰的方式来问我的问题是:单身人士需要被初始化,或者getInstance负责初始化实例,如果它是空的。 – jblue 2010-11-09 14:40:46
在这种情况下,'getInstance'负责初始化实例,如果它为空。但总的来说,并不一定。单例模式本身不定义实例是否必须在首次使用时自动初始化。但是,这样做的做法通常称为** lazy-loaded singleton **或** Initialization on Demand Holder **模式。 – netcoder 2010-11-09 14:53:05