最初,我的目的是创建一个类(面向对象)来将设置存储为常量。例如,在PHP中:
class Settings{
const test = 'foobar!';
}
但是稍后,我认为这种方法不会让管理员用户修改这些设置。似乎只有非必要的修改设置应该被声明为常量,而其他设置应该被声明为私有变量,然后应用程序将首先查找数据库设置表中的设置是否可用,如果没有,它将使用默认值来自get(),在Settings类中定义的set()函数。 这是一个好方法吗?什么是最好的方法?我很欣赏有关这个问题的任何建议。
答案 0 :(得分:3)
我更喜欢与您的方法类似,但使用私有静态属性key =>值数组与getter和setter。这样,您可以将它们绑定到文件或数据库。
$value = Classname::getparam('configsetting');
Classname::setparam('configsetting', $newvalue);
别忘了让get / set param 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 :(得分:1)
直接回答::你的方法很好,它的所有偏好。
根据是否要更改设置,您可能需要查看mysql存储或将设置存储到文件中,但是如果它们不会被更改,那么您的方法就可以了。 / p>
答案 2 :(得分:0)
您可能希望考虑使用YAML等格式的配置文件。
答案 3 :(得分:0)
我通常会将不需要修改的设置值作为常量和其他具有modify选项的设置保存到数据库中(getter / setter)。 然后我将数据缓存更长的时间,这样我就不必为每个请求访问数据库。 当管理员更改任何设置时,缓存无效,新值存储在缓存中。
还有另一种将设置数据存储在XML文件中的方法。谁能告诉我将设置数据存储在XML文件中与将其存储在数据库中相比有什么优势呢?