您好,登錄后才能下訂單哦!
這篇文章主要講解了“基于Zend的Config機制的應用方法”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“基于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文件內(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ù)是什么樣子的:
復制代碼 代碼如下:
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)錯誤,而且這個錯誤的用戶提示應該要非常友好,最好能提示用戶在那里進行修改,所以Zend特意將錯誤處理函數(shù)暴露出來。如果你想設(shè)計一款很友好的系統(tǒng)的話,請在繼承類中重寫方法_loadFileErrorHandler。
繼續(xù)從_loadIniFile看下去
由于我們的ini配置文件中使用[]表示了一個setion,因此_loadIniFile返回的二維數(shù)組返回的key就是general。但是其實如果我們在配置文件中使用[general:123]作為section,那么這個函數(shù)就會將123作為[;extends]的val返回。實際是這樣的
復制代碼 代碼如下:
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為冒號,那么你的配置文件就應該設(shè)置為translation:location = .. 這里就不繼續(xù)追下去了,里面無非就是一些字符串操作。
最后分析回來的dataArray是這個樣子的
復制代碼 代碼如下:
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é)束。
感謝各位的閱讀,以上就是“基于Zend的Config機制的應用方法”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對基于Zend的Config機制的應用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。