用 YAML 來作設定檔

在一年前就有讀過這一篇 Rails for PHP Developers – PHP, Meet YAML, 只是當時都還在忙唱片的東西, 沒有時間碰, 不過最近在自己實作 framework, 研究 CodeIgniterKohana 這兩個 framework 的做法, 一邊學習 PHP。 而在某些 library 會需要設定檔, 所以想要用 YAML 來作, 畢竟 PHP 變數的設定擋方式, 看起來真的很糟糕 Orz ( 不過效能就不知道會差多少 )

所以找了一下 PHP 上的關於 YAML 的 library, 找到了下面這幾個。

基本上應該是用 pecl-syck 會比較好, extension 會比較快 (?)

在 gentoo 上裝, 就打 emerge pecl-syck 就可以裝好了, 接著就有兩個 function 可以用 syck_loadsycn_dump

另外我又找了 spyc 這個 php class, 因為在 Mac 上裝 pecl-syck 真的是太麻煩了, 直接用 class 來作方便許多, 而且對於 PHP deployment, spyc 也是一個比較好的方法, 畢竟不是每個人都可以裝 pecl-syck。而 spyc 也是提供兩個 static method, Spyc::YAMLLoadSpyc::YAMLDump

所以我就又另外寫了一個 wrapper 叫 Yaml 的 class, 如下:

class Yaml  
{
    public static function load($yaml)
    {
        if (function_exists('syck'))
            return syck_load($yaml);

{gfm-js-extract-pre-1}<p></p>

這樣感覺會比較直覺一點, 直接用 yaml::load 或是 yaml::dump 感覺比較好, 而如果有 syck extension 就用 syck, 沒有在去用 spyc, 也剛好兩個都不叫 yaml XD

ok, 拿了 CodeIgniter 的 db 設定來作範例, 這個是 yaml

```

default:
hostname: localhost username: password: database: dbdriver: mysql dbprefix: pconnect: true dbdebug: true cacheon: false cachedir: charset: utf8 dbcollat: utf8general_ci```

這個是原本的 php 變數設定, 這個算是滿清楚的了, 更複雜的就…

$db['default']['hostname'] = "localhost"; $db['default']['username'] = ""; $db['default']['password'] = ""; $db['default']['database'] = ""; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['dbdebug'] = TRUE; $db['default']['cacheon'] = FALSE; $db['default']['cachedir'] = ""; $db['default']['charset'] = "utf8"; $db['default']['dbcollat'] = "utf8general_ci";

最後, 有空應該還是要來測試一下, 用 yaml 來當設定檔, 跟用 php 變數來當設定檔, 到底會差多少好了。

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!