2010-11-09 37 views
3

在我的bootstrap.php我有很多_initX()函數,其中一些可能包含取決於代碼在前面INITX待辦事項_initX()函數被調用的順序

protected function _initAutoloading() { } 
protected function _initViewInitializer() { } 
protected function _initVariables() { } 

所以我的問題代碼,這些_init函數是否保證按照聲明的順序執行?

回答

4

編輯 - 爲了提供更直接的回答你的問題,我會說他們可能會因爲代碼使用ReflectionObjects :: getmethods()或get_class_methods取決於你的PHP版本,所以我相信這些將返回函數但是在PHP文檔或Zend文檔中有什麼也沒有,保證這將永遠是這種情況,所以我不認爲這是一個支持的功能。

您可以傳遞您想要/需要調用的資源函數的名稱作爲引導程序調用的一部分:$bootstrap->bootstrap(array('foo', 'bar'));而不是傳遞任何東西,並讓Zend應用程序自動調用它們,您不確定該命令。

但是,如果您在引導程序資源之間存在依賴關係,那麼我建議您查看一下資源插件,它將允許您將代碼分離到不同類中,並輕鬆地從「bar」資源中調用$ bootstrap('foo')插件代碼(儘管你也可以使用_init *()函數)

資源插件的另一個好處是它們可以與其他引導文件共享,如果你需要,並且它們比_init *更容易測試( ) 功能。

確保你從Zend Application DOC

+0

+1:這是完全正確的(發現困難的方式:)) – 2010-11-09 16:22:54

1

如果你真的需要他們在一個特定的順序調用,你應該使用一個輔助列表:

var $init_us = array(
    "_initAutoloading", 
    "_initViewInitializer", 
    "_initVariables", 
); 

function __construct() { 
    foreach ($this->init_us as $fn) { 
     $this->{$fn}(); 
    } 
} 

要使用ZF是構建你可以到_initOrderedList的例子__construct和您的自定義_initFunctions重命名爲_myinit...或一些東西。

+0

jblue,他們答應在手冊中訂購執行嗎? – 2010-11-09 15:22:48

+0

如果沒有明確說明,我也會說你不應該依賴它。 – mario 2010-11-09 15:33:46

1

閱讀theory of operation文檔閱讀manual。有一部分稱爲依賴關係跟蹤:

如果資源依賴於另一個資源,它應該在其代碼中調用bootstrap()以確保資源已被執行。隨後對它的調用將被忽略。

下面是示例代碼:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initRequest() 
    { 
     // Ensure the front controller is initialized 
     $this->bootstrap('FrontController'); 

     // Retrieve the front controller from the bootstrap registry 
     $front = $this->getResource('FrontController'); 

     $request = new Zend_Controller_Request_Http(); 
     $request->setBaseUrl('/foo'); 
     $front->setRequest($request); 

     // Ensure the request is stored in the bootstrap registry 
     return $request; 
    } 
} 

你不必依靠的順序。

+0

我知道依賴解決方案。我試圖通過避免'$ this-> bootstap'和'$ this-> getResource'調用來最小化代碼,因爲每次我需要使用'$ front'就像在你的例子中那樣,我必須進行這兩個調用。還是不是這樣? – jblue 2010-11-09 22:22:26

+0

這是怎麼回事?速度?嘿,它是Zend Framework! ;-)沒有認真,只有三個或四個方法調用和一個數組中的兩個查找...沒有什麼大不了的。 – Maxence 2010-11-10 07:47:32