存储网站设置的最佳做法


Best practice for storing settings for a website?

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

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

但后来,我认为这种方法不允许管理员用户修改这些设置。似乎只有不必要的修改设置应该声明为常量,而其他应该声明为私有变量,然后应用程序将首先发现设置在数据库设置表中是否可用,如果没有,它将使用 get() 中的默认值,set() 函数在 Settings 类中定义。这是一个好方法吗?最好的方法是什么?我感谢关于这个问题的任何建议。

我更喜欢类似于您的方法,但使用带有 getter 和 setter 的私有静态属性 key=>value 数组。这样,稍后您可以将它们绑定到文件或数据库。

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

不要忘记将获取/设置参数设置为静态公共!

这是完整的类看起来像...

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;
     }
 } 

直接回答::你的方法很好,它都是偏好。

根据设置是否要更改,您可能需要查看 mysql 存储或将设置存储到文件中,但如果它们不会更改,如果您感到满意,您的方法就可以了。

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

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

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