欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Zend的Config機制的應(yīng)用分析

 更新時間:2013年05月02日 10:50:30   作者:  
本篇文章介紹了,基于Zend的Config機制的應(yīng)用分析。需要的朋友參考下

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中。

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

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

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

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

)

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

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

繼續(xù)從_loadIniFile看下去

由于我們的ini配置文件中使用[]表示了一個setion,因此_loadIniFile返回的二維數(shù)組返回的key就是general。但是其實如果我們在配置文件中使用[general:123]作為section,那么這個函數(shù)就會將123作為[;extends]的val返回。實際是這樣的

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

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

)

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

最后分析回來的dataArray是這個樣子的

復(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實現(xiàn)了Countable接口(包含count()方法),Iterator接口(包含current,key,next,rewind,valid等方法)

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


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

__set和__get

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

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


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

date_default_timezone_set($config->timezone);

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

相關(guān)文章

  • ThinkPHP5中如何實現(xiàn)模板完全靜態(tài)化詳解

    ThinkPHP5中如何實現(xiàn)模板完全靜態(tài)化詳解

    這篇文章主要為大家介紹了ThinkPHP5中如何實現(xiàn)模板完全靜態(tài)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Laravel學(xué)習(xí)教程之本地化模塊

    Laravel學(xué)習(xí)教程之本地化模塊

    這篇文章主要給大家介紹了關(guān)于Laravel學(xué)習(xí)教程之本地化模塊的相關(guān)資料,文中通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • ThinkPHP3.1新特性之G方法的使用

    ThinkPHP3.1新特性之G方法的使用

    ThinkPHP3.1的G方法的作用包括標(biāo)記位置和區(qū)間統(tǒng)計兩個功能。這篇文章主要介紹了ThinkPHP3.1版G方法的使用,需要的朋友可以參考下
    2014-06-06
  • 解決Laravel使用驗證時跳轉(zhuǎn)到首頁的問題

    解決Laravel使用驗證時跳轉(zhuǎn)到首頁的問題

    當(dāng)我們在使用validate等方法進行驗證時,如果是錯誤,則會返回首頁,那么這個跳轉(zhuǎn)到首頁如何實現(xiàn)的呢?今天小編給大家分享一篇教程關(guān)于Laravel使用驗證時跳轉(zhuǎn)到首頁的解決辦法,一起看看吧
    2021-10-10
  • PHPExcel 修改已存在Excel的方法

    PHPExcel 修改已存在Excel的方法

    下面小編就為大家分享一篇PHPExcel 修改已存在Excel的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 使用PHP+MySql+Ajax+jQuery實現(xiàn)省市區(qū)三級聯(lián)動功能示例

    使用PHP+MySql+Ajax+jQuery實現(xiàn)省市區(qū)三級聯(lián)動功能示例

    下面小編就為大家?guī)硪黄褂肞HP+MySql+Ajax+jQuery實現(xiàn)省市區(qū)三級聯(lián)動功能示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 一段防盜連的PHP代碼

    一段防盜連的PHP代碼

    一段防盜連的PHP代碼...
    2006-12-12
  • visual studio code 調(diào)試php方法(圖文詳解)

    visual studio code 調(diào)試php方法(圖文詳解)

    本篇文章主要介紹了visual studio code 調(diào)試php方法(圖文詳解),具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • Yii控制器中操作視圖js的方法

    Yii控制器中操作視圖js的方法

    這篇文章主要介紹了Yii控制器中操作視圖js的方法,結(jié)合實例形式總結(jié)分析了Yii框架動態(tài)操作視圖中頁面元素的相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • PHP微信開發(fā)之查詢城市天氣

    PHP微信開發(fā)之查詢城市天氣

    這篇文章主要為大家詳細介紹了PHP微信開發(fā)之簡單實現(xiàn)查詢城市天氣的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論