2013-01-01 24 views
1

在我的應用我有我的常量:爲什麼要傳遞一個Config對象?不能設置爲常量?

define('APP_PATH', WEB_ROOT . APP_DIR); 
define('LIBS_PATH', APP_PATH . LIBS_DIR); 
define('MODELS_PATH', APP_PATH . MODELS_DIR); 
define('VIEWS_PATH', APP_PATH . VIEWS_DIR); 
define('CONTROLLERS_PATH', APP_PATH . CONTROLLERS_DIR); 
etc... 

,因爲他們永遠不會改變我的一次應用程序啓動和他們簡單任何類/方法中訪問。

我有一個配置文件,也與被導入到$config對象,我繞過我的應用程序和檢索其他設置他們喜歡:

$this->config->setting('some.setting'); 

我從未有過在最後更改配置值或者在我的應用程序的中間,所以將它們定義爲常量並不容易,所以我可以輕鬆地在代碼中訪問它們嗎?

我不想被靜態檢索設置要麼即

Config::setting('some.setting'); 

我已經看過了幾個PHP框架的代碼,他們都定義路徑爲常數,但隨後有某種其他配置設置Config類,儘管據我所見,他們從來沒有改變整個代碼中的配置設置(他們可能會因爲我沒有讀過成千上萬的每一行),很多這樣的框架似乎都喜歡靜態調用來自不同類別和人員的方法中的各種方法都表示它們是很好的框架,但在靜態調用時, ithin類/方法。

你認爲什麼是最好的配置設置呢?你是做什麼?

+0

在這些框架的其他功能,爲不同環境下的不同配置的能力,用的傳承使(例如)你的配置文件可以定義除非特定的測試設置定義的測試環境中繼承了開發環境設置 –

+0

有意義,但然後訪問配置設置你不需要注入一個'$ config'對象的實例到需要設置的所有對象中嗎?或者做一個像'Config :: setting('some.setting')'的靜態調用;'爲了獲得你的設置或者有另一種方式? – ibanore

+0

您確實需要靜態注入或訪問;這正是大多數框架訪問配置的原因。使用依賴注入容器(DIC)可以簡化您向每個類中注入的內容。 –

回答

0

在對象中包裝常量使您的代碼更具可移植性。

這樣就可以在加載應用程序引導常數例如從一個文件,這樣你就可以在應用程序任意數量的具有不同的配置文件重用代碼,每個。

要在另一程度上,從類加載的東西作爲一個外觀:您可以從一個文件移動設置到數據庫,甚至硬編碼他們,整個應用程序不會注意到。

您可以define去當然是非常小的項目。

+0

我想我會繼續保留我的'Config'類以保證未來的可伸縮性。我有一個依賴注入容器,它自動檢索'$ config'對象的實例,並通過我的對象的構造函數注入它,以便它們可以使用它。這不是很麻煩,但有沒有更好的方法?或者是最好的方法?謝謝。 – ibanore

0

配置對象中的環繞設置提供了封裝,允許更好的共存。

例如,假設你有一個數據庫訪問的框架。如果您爲此使用全局設置,則無法輕鬆訪問單個程序中的多個數據庫。將設置放入對象允許您爲相應的數據庫使用特定的配置對象。

相關問題