配置设置策略


Configuration Settings Strategy

在我用PHP开发的CMS中,我有配置设置。它们都是常数。我之所以选择这种方法,是因为常量总是具有全局作用域,在遵循全大写约定的情况下很容易在代码中看到,并且不会被意外覆盖。这也是我的理解,引用常数是非常有效的;是真的吗?

这些常数有两个子集。有些是硬编码的,因为它们与我的代码或安全性有关。其他存储在设置表(MySQL)中,初始化时读入常量。

我担心这些常量的数量正在增加,并且我可能会与将来使用的第三方PHP模块发生冲突。

我想知道是否有更好的方法来处理这些设置。

我的主要想法是创建一个全局变量(例如,$settings),一个与我现在拥有的常量一一对应的关联(键值)数组。因此,不用

 define('MY_SETTING, 'setting value');

我将有

 $setting['my_setting'] = 'setting value';
当然,有两种方法可以访问它。最简单的方法是直接引用$setting数组,这需要在每个访问settings的函数中使用全局语句(至少大多数函数都是这样)。另一种方法是使用单个函数(例如,setting('my_setting))来引用全局数组以返回值。两者在语法上都很紧凑,尽管不像常量那么紧凑。

我的最后一个想法是给系统中的每个常数添加一个常数前缀。MY_SETTING将变成XY_MY_SETTING。这至少降低了碰撞的风险。

你会推荐其他的方法吗?对我目前所做的有什么评论吗?

谢谢。

附加信息:我决定运行四种访问方法的快速性能测试。结果(显示的数字是相对度量):

  • 常量:32
  • 直接引用关联数组:29
  • 访问关联数组的函数调用:91
  • 获取类的方法:103

显然,处理函数或方法的开销很高,而常量和数组引用之间的差异可以忽略不计。

您可以创建一个设置类

添加你认为合适的其他属性,并为它们添加getter和setter

这将使它与程序的其余部分分开,同时保持可见。