真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于Zend的Config機(jī)制的應(yīng)用方法-創(chuàng)新互聯(lián)

這篇文章主要講解了“基于Zend的Config機(jī)制的應(yīng)用方法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“基于Zend的Config機(jī)制的應(yīng)用方法”吧!

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計(jì),法庫(kù)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:法庫(kù)等地區(qū)。法庫(kù)做網(wǎng)站價(jià)格咨詢:18982081108

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文件內(nèi)容

[general]

url.base = "/usvn"

translation.locale = "zh_CN"

timezone = "Asia/Shanghai"


具體分析
這里只使用了Zend_Config_Ini的構(gòu)造函數(shù),我們看到它的__construct中。

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

下面是調(diào)用了$iniArray = $this->_loadIniFile($filename);這個(gè)函數(shù)非常重要,就是解析了配置文件。跟進(jìn)去,先是調(diào)用了_parseIniFile,為了不讓大家凌亂,我們看下_parseIniFile返回出來(lái)的數(shù)據(jù)是什么樣子的:


復(fù)制代碼 代碼如下:


Array
(
    [general] => Array
        (
            [url.base] => /usvn
            [translation.locale] => zh_CN
            [timezone] => Asia/Shanghai
            [system.locale] => aa_DJ.utf8
        )

)



最后解析出來(lái)的東西是一個(gè)二維數(shù)組。

parseIniFile實(shí)際上是調(diào)用了系統(tǒng)函數(shù)parse_ini_file來(lái)進(jìn)行處理的。這里特別注意一下,在調(diào)用parse_ini_file前后它其實(shí)使用了set_error_handler和restore_error_handler,將異常處理的函數(shù)暴露出來(lái)。因?yàn)樵诮馕雠渲梦募臅r(shí)候其實(shí)非常容易出現(xiàn)錯(cuò)誤,而且這個(gè)錯(cuò)誤的用戶提示應(yīng)該要非常友好,好能提示用戶在那里進(jìn)行修改,所以Zend特意將錯(cuò)誤處理函數(shù)暴露出來(lái)。如果你想設(shè)計(jì)一款很友好的系統(tǒng)的話,請(qǐng)?jiān)诶^承類中重寫方法_loadFileErrorHandler。

繼續(xù)從_loadIniFile看下去

由于我們的ini配置文件中使用[]表示了一個(gè)setion,因此_loadIniFile返回的二維數(shù)組返回的key就是general。但是其實(shí)如果我們?cè)谂渲梦募惺褂肹general:123]作為section,那么這個(gè)函數(shù)就會(huì)將123作為[;extends]的val返回。實(shí)際是這樣的


復(fù)制代碼 代碼如下:


Array
(
    [general] => Array
        (
            [;extends] => 123
            [url.base] => /usvn
            [translation.locale] => zh_CN
        )

)



現(xiàn)在又回到了__construct,這時(shí)候iniArray已經(jīng)獲取到了,是個(gè)二維數(shù)組,下面如果你設(shè)置了獲取section的話,就會(huì)將iniArray進(jìn)行處理_arrayMergeRecursive,主要就是將key中的system.locale => aa_DJ.utf8變?yōu)閍rray(system=> array( locale=>aa_DJ.utf8))。 這里就是用到了options中的nestSeparator屬性,這個(gè)屬性默認(rèn)是點(diǎn),就是translation.locale會(huì)被分隔成數(shù)組,比如你在前面?zhèn)魅氲膎estSeparator為冒號(hào),那么你的配置文件就應(yīng)該設(shè)置為translation:location = .. 這里就不繼續(xù)追下去了,里面無(wú)非就是一些字符串操作。

最后分析回來(lái)的dataArray是這個(gè)樣子的


復(fù)制代碼 代碼如下:


Array
(
    [url] => Array
        (
            [base] => /usvn
        )

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

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



下面調(diào)用父類的構(gòu)造函數(shù)__construct, Zend_Config_Ini的父類是Zend_Config。


class Zend_Config implements Countable, Iterator

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

Zend_Config的構(gòu)造函數(shù)將上面分析的二維數(shù)組放到_data中了。


這里注重看兩個(gè)函數(shù)

__set和__get

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

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


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

date_default_timezone_set($config->timezone);

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

感謝各位的閱讀,以上就是“基于Zend的Config機(jī)制的應(yīng)用方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)基于Zend的Config機(jī)制的應(yīng)用方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)頁(yè)名稱:基于Zend的Config機(jī)制的應(yīng)用方法-創(chuàng)新互聯(lián)
當(dāng)前地址:http://weahome.cn/article/jpchh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部