我应该在 PHP 应用程序中对配置文件使用 YAML 吗?不

2022-08-30 20:52:11

我目前正在编写自己的PHP框架(用于踢,而不是关键任务),并且我正在尝试添加功能,用户可以设置框架应该使用的数据库(一个主要数据库,然后可能是一个或两个回退 - 如sqlite),某些文件所在的位置等。我应该使用 YAML 吗?有没有更好的方法或标准做法?

我的想法

  1. YAML在可读性方面对用户(非技术)友好
  2. 为了防止我的框架需要非标准的PHP库,我必须使用像Symfony YAML这样的东西来解析文件。
  3. Symfony不是离开了YAML吗?
  4. 我可以使用一个充满变量的PHP文件,但这会使框架的设置对用户的透明度降低。

更新

我正在清理这个问题,以使其更具建设性,并纳入我得到的一些答案。

我的总体问题

  1. YAML 与其他方法(如 XML 甚至 INI 文件设置)相比有哪些优势?
  2. 关于何时使用YAML而不是其他方法,反之亦然,什么是一个好的经验法则?

答案 1

个人经验。YAML似乎是一个绝妙的主意,我喜欢它和它的简单性。然后我开始花时间在上面:能够用一种语言阅读它并用另一种语言写作的相同概念非常诱人,但是......简而言之,它变成了一种幻想,没有事实依据。

YAML的每个实现都与其他实现有太大不同

  • 由一个数组自动序列化的数组有时不能由另一个数组读取。

  • 支持交叉引用,但它们的实现非常粗略。

    引用功能强大,但是:

    • 对于某些硬核应用程序,它们非常有限
    • 对于大多数基于YAML的低端项目来说,它们代表了过度。


    因此,大多数解析器经常忽略它们并出错

总而言之,标准没有很好地设定。

有一些核心概念很好,很简单,但实际的标准文档充满了大多数人不想使用的功能的详细信息,并且难以实现且成本高昂

兼容性级别没有区别,就像DOM(DOM级别1,DOM级别2等)一样,所以每个解析器实现者实现他感觉喜欢的东西,在他可以承受的范围内,然后放弃它,很难辨别哪些有效,哪些无效

使用替代方案

  • JSON,如果您将跨语言数据交换语言小冗余方面视为最高优先级

  • INI,如果你重视性能和向后兼容性在PHP上,速度很快,从那以后......总是)和人类的可读性/可编辑性parse_ini_file()


答案 2

我个人更喜欢基于PHP的配置文件。

我知道php,所以对我来说,学习yaml只是为了配置文件是额外的工作,当你可以有一个简单的配置文件,就像这样,本质上并不更难,他们yaml,不需要一个特殊的解释器库,只需包含('config.php')你就离开了

$config = array(
  'database' => array(
      'default' => array(
         'name' => 'dbname',
         'host' => 'localhost',
         'user' => 'username',
         'pass' => 'password'
      )
   )
);

然后你可以引用这样的配置设置

$host = $config['database']['default']['host'];

下一步是保持配置文件简单,存储所需的最少数量的配置数据,然后使用数据库存储其余部分,并为最终用户提供管理屏幕以更改应用程序中的设置。


推荐