【问题标题】:Configuration Settings Strategy配置设置策略
【发布时间】:2013-01-11 02:17:35
【问题描述】:

在我用 PHP 开发的 CMS 中,我有配置设置。它们保持不变。我选择这种方法是因为常量始终具有全局范围,在遵循全部大写约定时很容易在代码中看到,并且不会被意外覆盖。我的理解也是,对常量的引用非常有效;这是真的吗?

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

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

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

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

 define('MY_SETTING, 'setting value');

我会的

 $setting['my_setting'] = 'setting value';

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

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

您还有其他推荐的方法吗?到目前为止我做了什么?

谢谢。

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

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

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

【问题讨论】:

  • 微优化是万恶之源。
  • @KingCrunch - 我在编写原始代码时并没有考虑到优化,但我已经过时了;如果我看到发生了很多事情,我想知道它吃了多少时间。对于部署到共享托管服务的站点,这可能很重要。

标签: php


【解决方案1】:

您可以创建一个设置类。

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

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

【讨论】:

  • 具有设置属性常量的设置类会很好地工作。
  • 我也想到了类的想法,但实例化不会是全局的,因此我需要在每个函数中使用全局语句。我还担心类方法会产生最差的性能。
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 2018-07-17
  • 2016-08-16
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2017-04-27
  • 2020-08-03
相关资源
最近更新 更多