3

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

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

但后来,我认为这种方法不会让 Admin 用户修改这些设置。好像只有非必要修改的设置声明为常量,其他的声明为私有变量,然后应用程序会先在数据库的设置表中查找设置是否可用,如果没有,则使用默认值来自 Settings 类中定义的 get()、set() 函数。这是一个好方法吗?最好的方法是什么?我很感激关于这个问题的任何建议。

4

4 回答 4

4

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

$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;
     }
 } 
于 2012-05-01T13:14:07.410 回答
1

直接回答:: 你的方法很好,它的所有偏好。

根据是否要更改设置,您可能需要查看 mysql 存储或将设置存储到文件中,但如果不更改设置,则您的方法可以满足您的要求。

于 2012-05-01T04:34:49.303 回答
0

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

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

于 2012-05-01T14:58:12.397 回答
0

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

于 2012-05-01T04:30:21.243 回答