| Jimi Dini ( @ 2007-03-05 11:24:00 |
Если вы читаете мой англоязычный блог, то вы уже в курсе и можете дальше не читать
Позанимаюсь немножко саморекламой :)
На этих выходных я переписал php-биндинг к библиотеке Syck, которая позволяет очень быстро и главное в соответствии со спецификацией парсить YAML-документы. Рост скорости по сравнению с реализацией написаной на PHP приблизительно в 1000 раз. Этот биндинг автоматически распознаётся фреймворком Symfony, так что если вы пишете на нём, то этот extension вам будет особенно полезен.
Изменения по сравнению со старой версией syck extension:
- Вместо падения в сегфолт на ошибках парсинга теперь кидается SyckException (наследуется от стандартного UnexpectedValueException -> RuntimeException)
- Исправлены проблемы с компиляцией, о которых я знал (теперь безболезненно собирается на MacOS-X и при включенном ZTS)
- В phpinfo() рапортуются версии библиотеки и биндинга
- Поддерживается PHP5+
Релиз с этими изменениями автор обещал сделать в течение месяца, а пока можно брать исходники из subversion
Что такое YAML и зачем он нужен
YAML — это кроссплатформенный формат сериализации массивов и хэшей произвольной вложенности (с поддержкой указателей на другие массивы описанные в этом же документе). Основной элемент форматирования: отступ в 2 пробела.
---
# Пример синтаксиса (это комментарий)
array:
- "element1" # это строка
- element2 # это тоже строка
- 0.5
- null # это null, а не строка
- true # а это булево значение
hash:
key: value # пара ключ-значение
key2: [ elt1, 100, elt3 ] # а тут в качестве значения используется inline-массив
key3: { a: b, c: d, e: "some other value" } # а это inline-хэш
texts: # а это вложенный хэш с двумя элементами
sometext: >
А это произвольный многострочный текст, в
котором переносы строк на выходе будут
заменены на пробелами
somesource: |
<?php
// А это тоже текст, но на этот раз переносы строк будут сохранены
$string = file_get_contents('test.yml');
$array = syck_load($string);
var_dump($array);
?>
Я использую YAML в основном для хранения файлов конфигурации, но на практике могут быть очень разные применения. Например Release-notes библиотеки Syck выполнены именно в виде YAML-файла. Читается на удивление легко, вы не находите? Сравните с XML :)
Материалы по теме:
- YAML Ain't Markup Language (официальный сайт)
- Мнение wikipedia
- YAML Cookbook (ruby)