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