簡體   English   中英

全局變量與配置變量

[英]Global Variables vs. Config Variables

我在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.現在我可以撥打我想要的任意數量的website_title()了。

這是一個好的解決方案嗎? 您看到任何不利之處嗎?

注意:我嘗試避免使用全局變量,因為我嘗試了它,並且遇到了許多不必要的問題,例如未定義的變量,感到驚訝!

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

WEBSITE_TITLE

您所說的“高效”是什么意思? 運行效率? 編碼效率? 明晰?

在運行時效率方面, Truth的使用建議也許是最簡單,最好的。 但是,我更喜歡使用嚴格的類/對象實現進行編碼,實際上定義只是全局常量。

如果您對絕大多數腳本進行了概要分析,則會發現無論對代碼進行編碼還是對運行時都沒有實質性影響,因此我建議每次都簡化代碼的過程。

一種方法是使用單例類(有關此操作的教程很多),並使用魔術方法__get()允許您動態重載參數訪問。 在這種情況下,我覺得您必須使用單個類,因為這些屬性方法僅適用於對象(非靜態)參數引用。 因此,您可以簡單地使用:

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

請注意,以上示例中的$cfg本質上存儲了一個對象句柄,因此這樣做沒有任何實質性的運行時開銷,並且您可以將此語句放在引用配置項的每個函數或類構造函數的頂部,如果不這樣做的話想要使用Configuration::get()->someOtherParameter類型調用Configuration::get()->someOtherParameter

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

我個人不建議使用__set()魔術方法重載,因為IMO,覆蓋或設置配置參數應該是顯式操作,例如$cfg->setConfigItem( 'someValue', TRUE );

如果您需要一些想法, 這里是指向我的config類的文檔的鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM