PHP 中 YAML 的使用:库、解析与文件创建

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP 中 YAML 的使用:库与工具



YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式。它常用于配置文件、数据模式定义以及服务间的信息交换。在 PHP 中,有多种处理 YAML 的方式:从内置扩展(如果可用)到强大的第三方库。本文将详细介绍主要工具、它们的安装方法以及实际示例。



为什么在 PHP 中需要 YAML?

PHP 开发者广泛使用 YAML 来:

  • 框架的配置文件(Symfony,某些情况下的 Laravel);
  • 描述数据库迁移;
  • 存储翻译和本地化内容;
  • 定义测试数据结构(fixtures);
  • 配置 CI/CD(GitLab CI、Ansible)。

理解如何在 PHP 中解析和创建 YAML,是现代后端开发者的必备技能。



1. 内置 yaml 扩展(PECL)

最高性能的方式是使用通过 PECL 安装的 yaml 扩展。它提供了两个关键函数:

  • yaml_parse() — 将 YAML 字符串转换为 PHP 数组;
  • yaml_emit() — 将 PHP 数组转换为 YAML 字符串。


安装

pecl install yaml

安装后,在 php.ini 中添加一行:

extension=yaml.so


使用示例

<?php// 解析 YAML 字符串$yamlString = "database:  host: localhost  port: 3306  name: test_db";

$config = yaml_parse($yamlString);echo $config['database']['host']; // localhost

// 从数组创建 YAML$data = [ 'app' => [ 'name' => 'MyApp', 'version' => '2.0' ]];

$yamlOutput = yaml_emit($data);echo $yamlOutput;?>


2. Symfony Yaml 库(推荐方式)

如果您无法安装 PECL 扩展(例如在共享主机上),最佳选择是 Symfony Yaml 库。它是 Symfony 生态系统的一部分,但也可以作为独立组件完美运行。该库完全用 PHP 编写,无需外部依赖,并支持 YAML 1.1 和 1.2 的所有功能。



通过 Composer 安装

composer require symfony/yaml


主要类

  • Symfony\\Component\\Yaml\\Yaml — 静态外观,包含 parse() 和 dump() 方法;
  • Symfony\\Component\\Yaml\\Parser — 用于解析的类,带有额外选项;
  • Symfony\\Component\\Yaml\\Dumper — 用于创建 YAML 的类,可精细调整格式。


YAML 解析示例

<?phprequire_once 'vendor/autoload.php';

use Symfony\\Component\\Yaml\\Yaml;

$yamlContent = "server: host: 0.0.0.0 port: 8080 ssl: true";

try { $array = Yaml::parse($yamlContent); print_r($array); // Array ( [server] => Array ( [host] => 0.0.0.0 [port] => 8080 [ssl] => 1 ) )} catch (\\Symfony\\Component\\Yaml\\Exception\\ParseException $e) { echo 'YAML 解析错误: ' . $e->getMessage();}?>


从数组创建 YAML(转储)

<?php$config = [    'application' => [        'name' => 'PHP App',        'debug' => true,        'database' => [            'driver' => 'mysql',            'host' => 'localhost',            'user' => 'root'        ]    ]];

$yaml = Yaml::dump($config, 3, 2);// 第二个参数是内联层级,第三个参数是空格缩进echo $yaml;?>


执行结果:

application:  name: 'PHP App'  debug: true  database:    driver: mysql                    

推荐