网站存储设置的最佳实践是什么?

3

最初,我的意图是创建一个类(面向对象)来存储常量设置。例如,在PHP中:

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

但是后来我认为这种方法不能让管理员用户修改这些设置。似乎只有那些不需要修改的设置才应该被声明为常量,而其他的应该被声明为私有变量,然后应用程序会首先在数据库设置表中查找是否存在这些设置,如果没有,它将使用Settings类中定义的get()、set()函数中的默认值。 这是一个好方法吗?什么是最佳方法?我对这个问题的任何建议都非常感激。

我的观点是我认为这个问题很重要!一个深思熟虑、一致的管理网站设置的方法是值得考虑的。我曾经与许多充斥着全局定义垃圾的网站一起工作,这些定义散落在各个地方...当你拥有一种灵活的语言时,你有责任考虑设计细节。 - Ray
4个回答

4
我倾向于与您类似的方法,但使用一个包含私有静态属性键值对的getter和setter数组。这样一来,以后您就可以将它们绑定到文件或数据库上。
$value = Classname::getparam('configsetting');
Classname::setparam('configsetting', $newvalue);

不要忘记将get/set参数方法设为公共静态方法!

完整的类如下所示...

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
谢谢。我在这里找到了一个非常好的参考资料(特定于Yii框架):http://programmersnotes.info/2009/03/04/handling-application-parameters-in-yii-using-the-database/ 不过,我会按照你的方法来做。 - Duc Tran

1
直接回答:您的方法很好,这完全是个人偏好。
根据设置是否会更改,您可能需要考虑使用MySQL存储或将设置存储到文件中,但如果它们不会被更改,那么如果这是您熟悉的方法,那么您的方法就很好。

0

您可能希望考虑使用诸如YAML格式的配置文件。


一个非常方便的工具,用于解析YAML配置文件:http://framework.zend.com/manual/en/zend.config.adapters.yaml.html - mantigatos

0

我通常将不需要修改的设置值作为常量保留,将具有修改选项的其他设置存储在数据库中(getter/setter)。 然后,我会将数据缓存更长时间,以便我不必为每个请求访问数据库。 当管理员更改任何设置时,缓存将失效,并将新值存储在缓存中。

还有一种将设置数据存储在XML文件中的方法。有人能告诉我将设置数据存储在XML文件中与将其存储在数据库中相比的优势是什么吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接