【问题标题】:Best practice for storing settings for a website?存储网站设置的最佳实践?
【发布时间】:2012-05-10 17:38:53
【问题描述】:

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

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

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

【问题讨论】:

  • 我的投票是我认为这个问题很重要!一个经过深思熟虑的、一致的方式来合理地管理您的站点设置是值得花时间考虑的。我曾与许多网站合作过,这些网站到处都在定义全球定义的废话……当您拥有灵活的语言时,您就有责任考虑设计细节。

标签: php settings


【解决方案1】:

您不妨考虑使用YAML 等格式的配置文件。

【讨论】:

【解决方案2】:

直截了当的回答:: 你的方法很好,这是所有偏好。

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

【讨论】:

    【解决方案3】:

    我更喜欢与您的方法类似,但使用带有 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;
         }
     } 
    

    【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2011-06-09
      • 2010-10-17
      • 1970-01-01
      相关资源
      最近更新 更多