PHP利用Zend的Config机制用法
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
Zend的Config类在Zen
这篇文章主要为大家详细介绍了PHP利用Zend的Config机制用法,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
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返回出来的数据是什么样子的:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | <code>Array ( [general] => Array ( [url.base] => /usvn [translation.locale] => zh_CN [timezone] => Asia/Shanghai [system.locale] => aa_DJ.utf8 ) ) </code> |
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返回。实际是这样的
代码如下:
1 2 3 4 5 6 7 8 9 10 11 | <code>Array ( [general] => Array ( [; extends ] => 123 [url.base] => /usvn [translation.locale] => zh_CN ) ) </code> |
最后分析回来的dataArray是这个样子的
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <code>Array ( [url] => Array ( [base] => /usvn ) [translation] => Array ( [locale] => zh_CN ) [timezone] => Asia/Shanghai [system] => Array ( [locale] => aa_DJ.utf8 ) ) </code> |
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机制用法的内容就先介绍到这里,更多相关文章的可以留意