一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

基于Zend的Config機制的應用分析

Zend的Config類在Zend_Config_Ini

代碼
$config = new Zend_Config_Ini("/var/www/html/usvn/config/config.ini", "general");

date_default_timezone_set($config->timezone);

USVN_ConsoleUtils::setLocale($config->system->locale);

===

Config.ini文件內容

[general]

url.base = "/usvn"

translation.locale = "zh_CN"

timezone = "Asia/Shanghai"


具體分析
這里只使用了Zend_Config_Ini的構造函數,我們看到它的__construct中。

首先是判斷是否有配置文件。其次是對option進行管理,這里的option可以設置的有allowModifications屬性(配置文件中的屬性是否可以修改),nestSeparator屬性(配置文件中的key分隔符,默認為點)。

下面是調用了$iniArray = $this->_loadIniFile($filename);這個函數非常重要,就是解析了配置文件。跟進去,先是調用了_parseIniFile,為了不讓大家凌亂,我們看下_parseIniFile返回出來的數據是什么樣子的:
復制代碼 代碼如下:
Array
(
    [general] => Array
        (
            [url.base] => /usvn
            [translation.locale] => zh_CN
            [timezone] => Asia/Shanghai
            [system.locale] => aa_DJ.utf8
        )

)

最后解析出來的東西是一個二維數組。

parseIniFile實際上是調用了系統函數parse_ini_file來進行處理的。這里特別注意一下,在調用parse_ini_file前后它其實使用了set_error_handler和restore_error_handler,將異常處理的函數暴露出來。因為在解析配置文件的時候其實非常容易出現錯誤,而且這個錯誤的用戶提示應該要非常友好,最好能提示用戶在那里進行修改,所以Zend特意將錯誤處理函數暴露出來。如果你想設計一款很友好的系統的話,請在繼承類中重寫方法_loadFileErrorHandler。

繼續從_loadIniFile看下去

由于我們的ini配置文件中使用[]表示了一個setion,因此_loadIniFile返回的二維數組返回的key就是general。但是其實如果我們在配置文件中使用[general:123]作為section,那么這個函數就會將123作為[;extends]的val返回。實際是這樣的
復制代碼 代碼如下:
Array
(
    [general] => Array
        (
            [;extends] => 123
            [url.base] => /usvn
            [translation.locale] => zh_CN
        )

)

現在又回到了__construct,這時候iniArray已經獲取到了,是個二維數組,下面如果你設置了獲取section的話,就會將iniArray進行處理_arrayMergeRecursive,主要就是將key中的system.locale => aa_DJ.utf8變為array(system=> array( locale=>aa_DJ.utf8))。 這里就是用到了options中的nestSeparator屬性,這個屬性默認是點,就是translation.locale會被分隔成數組,比如你在前面傳入的nestSeparator為冒號,那么你的配置文件就應該設置為translation:location = .. 這里就不繼續追下去了,里面無非就是一些字符串操作。

最后分析回來的dataArray是這個樣子的
復制代碼 代碼如下:
Array
(
    [url] => Array
        (
            [base] => /usvn
        )

    [translation] => Array
        (
            [locale] => zh_CN
        )

    [timezone] => Asia/Shanghai
    [system] => Array
        (
            [locale] => aa_DJ.utf8
        )
)

下面調用父類的構造函數__construct, Zend_Config_Ini的父類是Zend_Config。


class Zend_Config implements Countable, Iterator

Zend_Config實現了Countable接口(包含count()方法),Iterator接口(包含current,key,next,rewind,valid等方法)

Zend_Config的構造函數將上面分析的二維數組放到_data中了。


這里注重看兩個函數

__set和__get

魔術方法__get保證了可以使用config->field獲取配置值

魔術方法__set保證了是否可以修改配置文件,set中就使用到了_allowModifications,如果這個屬性有設置,那么__setter就可以設置,否則會拋出Zend_Config is read only的異常,allowModifications也是options中設置的屬性之一。


至此,看文章最前面的demo代碼

date_default_timezone_set($config->timezone);

這里之所以能使用->timezone就是使用了__get而不是config中的屬性。
Zend的Config機制分析結束。

php技術基于Zend的Config機制的應用分析,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲视频国产 | 天天更新天天久久久更新影院 | 欧美人体极品大胆露私 | 国产精品99精品久久免费 | 亚洲国产成人最新精品资源 | 久久综合九九亚洲一区 | 久久久精品中文字幕 | 国产福利在线小视频 | 日本人乱人乱亲乱色视频观看 | 久久免费精品国产72精品剧情 | 亚洲精品欧美综合四区 | 国产黄频在线观看高清免费 | 国产在线综合网 | 亚洲精品第一页中文字幕 | 欧美高清强视频 | 亚洲丶国产丶欧美一区二区三区 | 久久久久久久久久久大尺度免费视频 | 天天天做天天天天爱天天想 | 怡红院最新网址 | 久久91综合国产91久久精品 | 夜夜爽天天狠狠九月婷婷 | 国产一区国产二区国产三区 | 欧美一欧美一区二三区性 | 国产精品欧美在线 | 午夜精品久久久久久中宇 | 成人午夜精品网站在线观看 | 亚洲精品在线观看91 | 国产馆手机在线观看 | 精品一区二区三区免费站 | 国产精品一区伦免视频播放 | 一级寡妇乱色毛片全场免费 | 欧美在线黄 | 精品国产第一国产综合精品gif | 青青草原伊人网 | 91福利视频免费 | 精品国产亚洲人成在线 | 伊人久久大线蕉香港三级 | 久久伊人色综合 | 国产免费久久精品丫丫 | 中文字幕亚洲区 | 国产成人lu在线视频 |