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

Lev*_*ith 18 php yaml

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

我的想法

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

更新

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

我有的总体问题

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

ZJR*_*ZJR 26

没有

个人经验.YAML似乎是一个很好的主意,我很喜欢它和简单.然后我开始把时间花在它上面:能够用一种语言阅读它并在另一种语言中写入的相同概念非常诱人,但是......简而言之,它变成了一种幻觉,没有事实根据事实证明.

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

  • 由一个自动序列化的数组有时不能被另一个读取.
  • 支持交叉引用,但它们的实现非常粗略.

    参考文献很有用,但是:

    • 对于某些硬核应用,它们非常有限.
    • 它们代表了对大多数基于YAML的低端项目的过度杀伤力.


    因此,大多数解析器经常会忽略它们并对它们产生错误.

总结一下,标准设置不好.

有一些核心概念很简单,但实际的标准文档中充满了大多数人不想使用的功能的详细信息,并且实现起来既困难又昂贵.

没有一个区分兼容性的水平,好像有在DOM(DOM 1级,2级DOM等),所以每一个解析器实现者实现他觉得什么样子,对他所能承受的程度,然后删除它和它的很难辨别哪些有效,哪些无效.

使用替代品

  • JSON如果您重视交叉语言数据交换语言少量冗余方面作为首要任务

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

  • 没有提到普通的 PHP 数组?当然,它们将具有最佳性能,与 JSON 非常相似,但更灵活,它们允许注释和条件,还允许 PHP 解析器进行正确的语法错误检查。 (2认同)

bum*_*box 5

我个人的偏好是基于PHP的配置文件.

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

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

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

$host = $config['database']['default']['host'];
Run Code Online (Sandbox Code Playgroud)

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

  • @ZJR ......或者只是将`var_export`的第二个参数设置为true,告诉它返回结果而不是输出结果. (2认同)