2010-11-09 135 views
1

我正在查看一些我在过去2个月为Zend编写的代码,并且在初始化过程中发现了一些不一致(因为我是初学者)前端控制器。初始化前端控制器,这两个有什么区别

我看,有时我做这个

$frontController = Zend_Controller_Front::getInstance(); 

和其他时间我做这个

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

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

回答

4

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

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

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

+0

Zend中的前端控制器始终是单例。即使在使用应用程序引导程序时,资源也会使用'getInstance'调用它。参见'Zend_Application_Resource_Frontcontroller :: getFrontController'。 – netcoder 2010-11-09 13:54:52

+0

@netcode,我明白这是一个单身人士。一个更清晰的方式来问我的问题是:单身人士需要被初始化,或者getInstance负责初始化实例,如果它是空的。 – jblue 2010-11-09 14:40:46

+1

在这种情况下,'getInstance'负责初始化实例,如果它为空。但总的来说,并不一定。单例模式本身不定义实例是否必须在首次使用时自动初始化。但是,这样做的做法通常称为** lazy-loaded singleton **或** Initialization on Demand Holder **模式。 – netcoder 2010-11-09 14:53:05

1

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

2
Zend_Controller_Front::getInstance() 

第一种方法是直接调用前端控制器的。

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

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

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