【问题标题】:How to load PHP config files with an autoloader如何使用自动加载器加载 PHP 配置文件
【发布时间】:2015-05-04 17:50:51
【问题描述】:

我有一个遗留代码项目,我几乎成功地将其转换为使用自动加载器,而不是大量的 include 和 require 语句。

我唯一剩下的问题是一个配置文件,它设置了一些全局配置内容。就像现在一样,它只是一个直接的 PHP 加载应用程序所需的变量。

我的想法是将其转换为具有“全局”数据的类常量的类。进行类常量调用将触发配置类的自动加载,并将所有内容置于自动加载器的控制之下。

我的问题是,这是否是解决此问题的最佳方法以及其他人是否做过类似的事情?

所以在我的应用程序中而不是调用这样的东西来访问配置变量。

$GLOBALS['conf']['thingy'];

会变成这样。

Config::THINGY

things 是一个类 const。

class Config {
   const THINGY = 'yes, this is it';
}

这种方法还摆脱了全局数据引用,我认为这总是一件好事。

【问题讨论】:

  • 我喜欢Config::THINGY的语法。见:stackoverflow.com/questions/3724584/…
  • 我通常通过将配置文件保存在一个(或多个)特定目录中来解决这个问题,然后使用接口常量引用这些目录。然后,您可以将接口放在需要加载配置文件以使路径可用的任何类上。

标签: php oop autoloader


【解决方案1】:

您绝对是在正确的轨道上。与任何与编程相关的事情一样,有 100 万 + 1 种剥猫皮的方法,这里有一些选项/w 一些信息。

Yaml:被 Symfony 等框架大量使用。如果你不使用 SF 框架,你可以很容易地实现沿 SF Yaml 解析器的立场。支持层次结构。

JSON:维护配置选项的好方法,高度可移植。支持层次结构。

ini:您可以使用内置的 parse_ini_file 函数来加载配置设置,但是 ini 文件中的层次结构难以维护,只能使用任意命名空间约定来实现。

数据库:您实际上可以将设置存储在数据库中(在永久存储和应用程序之间有一个缓存层),如果您想为用户创建一个 web gui 以更改值,这很有用,无需推送代码。

类常量:这种方法一点问题都没有,但是可以说任何一个配置选项都会“更干净”,更便携。

【讨论】:

  • 不错的选择。我想我可能错误地识别了我正在使用的东西。它实际上并不完全是直接的配置数据,它也是使用 PHP 计算的应用程序初始化数据。我在数据库中有大部分实际的配置内容,为了消除配置“config”文件的硬路径的需要,我将该硬路径移到了我的数据库配置表中。这不是最理想的解决方案,但我正在尝试使用带有此代码的手术刀来避免过多的中断。重写整个事情不是一种选择。专业的粪便抛光机。
  • 你绝对是在做正确的事,我想我们都在同一个问题上,试图清理一个没有远见也没有考虑搁置的人的烂摊子生活。 Symfony 使用 sfConfig::get('some_config_value'),通过它我们可以覆盖 get 方法并让它尝试 memcache,然后是 db / file (yaml)。
  • 是的,我的目标是将尽可能多的遗留代码和所有新代码移入 Symfony。这是最令人愉快的框架。保持物品干净整洁真的很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多