在PHP中管理全局范围数据和设置的推荐方法?

Fro*_*y Z 6 php scope global-variables global-scope

在PHP开发几年后,我看到并听到了存储"全局范围数据"(全局,常量,ini/XML/YML文件,数据库,单例属性......)的各种方法.

通过"全球范围数据",我的意思是:

  • 全局应用程序/项目设置如
    • 数据库配置
    • SMTP,FTP参数
  • 数据库标识符(例如,在DB中定义的特定语言或国家/地区的主键值)
  • 全局运行时设置,例如
    • 启用日志记录/调试
    • 环境是dev/test/prod
  • 等等

...一旦检索到它们就不应该改变,并且需要在项目代码的任何部分容易地到达.

某些全局数据可能需要存储为关联数组(因此不能声明为常量).
例如:每种语言的日期格式.顺便说一下,我看到了关于数组常量的另外一个问题,但是除了unserialize在任何地方使用数组常量值之外,是不是有更多的可读性?

我的主要问题是:您建议正确存储(我的意思是干净,可读,可靠)全球范围数据的方式是什么,以及为什么(优点/缺点)?

谢谢.

mar*_*kus 2

您可以查看Zend_Config以了解最常见的配置实现。

  • 大批(仅限 php,直接但分散且难以阅读)
  • .ini(易于手写)
  • XML(冗长且难以处理,但非常灵活)
  • json(非常容易阅读,如果你也想通过 js 直接访问它,那就太好了)
  • yaml(基本上直接写一个序列化数组)

当然,数组似乎是最直接、最简单的解决方案,因为它是纯 PHP,不需要任何特殊的解析器或编写器。

另一方面,其他格式也有明显的优势。Zend_Config 文档包含有关 ini 文件的示例。

INI 格式专门用于提供配置数据密钥层次结构和配置数据部分之间的继承的能力。通过用点或句点字符(“.”)分隔键来支持配置数据层次结构。

使用常量不是一个好主意,因为:

  1. 您的应用程序不需要始终查看所有配置选项
  2. 更重要的是,您不能嵌套常量,而嵌套对于配置来说非常重要。