2010-11-09 101 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。

相關問題