最初,我的目的是创建一个类(面向对象)来将设置存储为常量。例如,在 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文件中有什么优势?