background image

最后解析出来的东西是一个二维数组。
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