2012-05-01 41 views
3

最初,我的目的是創建一個類(面向對象)來將設置存儲爲常量。例如,在PHP中:存儲網站設置的最佳做法?

class Settings{ 
    const test = 'foobar!'; 
} 

但後來,我認爲這種方法不會讓管理員用戶修改這些設置。看來,只有非必要對修改的設置應被聲明爲常數,和其他人應被聲明爲私有變量,那麼應用程序會發現設置是否在數據庫中設置表可用第一,如果沒有,它會使用默認從Settings類中定義的get(),set()函數。 這是一個很好的方法嗎?什麼是最好的方法?我很感謝在這個問題上的任何建議。

+0

是否真的重要? – Petah

+0

我的投票是我認爲這個問題很重要!經過深思熟慮,一致地管理您的網站設置的方式值得花時間考慮。我與很多網站合作過,遍佈各地的全球定義垃圾......當你有靈活的語言時,你有責任思考設計細節。 – Ray

回答

3

我一個喜歡類似的方法,但是,使用專用靜態屬性鍵=>值數組getter和setter。這樣以後你可以將它們綁定到一個文件或數據庫。

$value = Classname::getparam('configsetting'); 
Classname::setparam('configsetting', $newvalue); 

不要忘了讓get/set參數mehods公共靜態!

下面是完整的類看起來像......

class Classname{ 
    private static $params = null; 

    public static function getparam($key){ 
     if(is_null(self::$params){ 
      self::$params = array(); 
      //initialize param array here from file, db, or just hardcoded values... 
     } 
     return isset(self::$params[$key])?self::$params[$key]:null; 
    } 

    public static function setparam($key, $value){ 
     if(is_null(self::$params){ 
      self::$params = array(); 
      //initialize array here 
     } 
     self::$params[$key] = $value; 
    } 
} 
+1

thks。我在這裏發現了一個非常好的參考(特定於Yii框架):http://programmersnotes.info/2009/03/04/handling-application-parameters-in-yii-using-the-database/ 但是,我會遵循你的方法。 – Silentbang

0

您不妨考慮使用如YAML格式的配置文件。

+0

對於良好的鏈接 – diEcho

+0

和一個非常[方便的工具](http://framework.zend.com/manual/en/zend.config.adapters.yaml.html)YAML配置解析 – mantigatos

1

直接的答案::你的方法是好的,它的所有的偏好。

根據是否要更改設置,您可能需要查看mysql存儲或將設置存儲到文件中,但是如果它們不會被更改,那麼您的方法很好,如果這就是您所喜歡的。

0

我通常保留設置值是沒有必要修改具有修改選項到數據庫中恆和其他設置(的getter /二傳手)。 然後我緩存數據一段較長的時間,以便我不必爲每個請求訪問數據庫。 當管理員更改任何設置時,緩存將失效並將新值存儲在緩存中。

有一個是存儲在XML文件中的設置數據的另一種方法。任何人都可以告訴我,與將數據存儲在數據庫中相比,將設置數據存儲在XML文件中有什麼優勢?

相關問題