2012-07-08 173 views
0

我在application/config/config.php中有自定義配置項。全局變量與配置變量

樣品我的自定義配置項:

$config['website_title'] = 'ABC Website'; //Assume website title is fixed 
. 
. 
. 
etc 

現在我可以調用任何$this->config->item('website_title')凡在我的應用程序。但是,我並沒有發現它足夠高效,因爲我可能在項目中有多個$ this-> config-> item('website_title')。我想出了以下解決方案:

1.創建一個功能,一個助手裏,返回的配置項,如下:

public function website_title() { 

    return $this->config->item('website_title'); 

} 

2.Now我可以調用website_title()多達我想要。

這是一個很好的解決方案嗎?你看到任何缺點嗎?

注:我嘗試,因爲我嘗試了避免使用全局變量和我 面臨着許多不必要的問題,如不確定的變量, 驚訝!

回答

0

「高效」是什麼意思?運行時效率?編碼效率?明晰?

就運行效率而言Truth的使用建議可能是最簡單和最好的。但是,我更喜歡使用嚴格的類/對象實現進行編碼,實際上,定義只是全局常量。

如果配置文件中的絕大部分腳本,你會發現,無論你編寫配置引用使得在運行時沒有重大的影響,所以我建議去爲簡單和編碼每一次的清晰度。

一種方法是使用單例類(有很多關於這樣做的教程),並使用神奇方法__get()來允許動態重載參數訪問。這是一種情況,我覺得你必須使用一個類,因爲這些屬性方法只能用於對象(非靜態)參數引用。因此,你可以簡單地使用:

$cfg = Configuration::get(); 
... 
... $cfg->someConfigParam ... // to refer to a config parameter 
... 
... /* or even */ ... Configuration::get()->someOtherParameter ... 

注意$cfg在上面的例子基本存儲對象句柄,所以沒有這樣做,材料運行成本,你可以在每個函數的頂部把這個陳述或如果你不想用Configuration::get()->someOtherParameter類型的調用拋棄你的代碼,那麼它引用一個配置項。

Configuration::__get()訪問函數加上類構造函數可以處理緩存和訪問各個參數的所有複雜性。這也意味着你也可以封裝配置的來源:一些特定於應用程序的D/B配置表;一個或多個配置文件,...;甚至cookie或URI參數(只要您包含適當的驗證)。

我個人建議不要用__set()這個神奇方法加載,因爲IMO會覆蓋或設置一個配置參數應該是一個明確的動作,例如, $cfg->setConfigItem('someValue', TRUE);

Here是一個鏈接到我的配置類的文檔,如果你想要一些想法。

0

我曾經對程序員提出過這樣的問題。我得到了一個很好的答案,只需使用常量。

I.e. WEBSITE_TITLE