sal*_*the 20
我将从您链接的页面中概述(某些)类常量,然后提出其他一些要点.
该RecursiveIteratorIterator::LEAVES_ONLY迭代模式.(这是默认模式.)
这种迭代模式(三个中的一个)将迭代期间可用的项目限制为仅仅"叶子"(将递归结构视为具有一系列分支发芽其他分支的树,或者在没有更多分支的情况下,具有叶子的树结束).在阵列array('a'=>array('b','c'),'d','e'=>array('f','g'))的叶子b,c,d,f和g因为它们是在最后,他们不发芽任何更多的项目.
给出一个显示这个模式的代码片段(将会有一系列示例具有相同的递归数组迭代器和一个使用不同模式和标志的递归迭代器迭代器):
$array = array('a'=>array('b','c'),'d','e'=>array('f','g'));
$ait = new RecursiveArrayIterator($array);
// Only iterate over leaves
$rit = new RecursiveIteratorIterator($ait, RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($rit as $item) {
echo $item;
}
// Output: bcdfg
Run Code Online (Sandbox Code Playgroud)
该RecursiveIteratorIterator::SELF_FIRST迭代模式.
这种迭代模式指示迭代器在迭代时将"父"项(即不是叶子)放在它们的子项(如果有的话)之前.
// Parents come first
$rit = new RecursiveIteratorIterator($ait, RecursiveIteratorIterator::SELF_FIRST);
foreach ($rit as $key => $item) {
if (is_array($item)) echo "[$key]"; // parent
else echo $item; // child
}
// Output: [a]bcd[e]fg
Run Code Online (Sandbox Code Playgroud)
该RecursiveIteratorIterator::CHILD_FIRST迭代模式.
这种迭代模式围绕父/子位置交换,使得子项(叶子)首先出现,然后是父项,如下所示:
// Children first
$rit = new RecursiveIteratorIterator($ait, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($rit as $key => $item) {
if (is_array($item)) echo "[$key]"; // parent
else echo $item; // child
}
// Output: bc[a]dfg[e]
Run Code Online (Sandbox Code Playgroud)
RecursiveIteratorIterator构造函数标志
这些只是迭代迭代迭代器的三种模式(仅叶子,父亲优先或子优先)的常量.RecursiveIteratorIterator还有一个flags参数,它会影响其他行为,例如是否在子对象抛出异常时停止,是否调用__toString项等等(标志是CachingIterator常量,同样没有文档).
其他SPL常量
这与我的下一点有关.没有单一的一站式点,它列出了整个SPL中可用的所有常量:大多数类甚至没有列出自己的常量.但是,您可以使用反射来查看可用的常量.在命令行上使用类似的东西php --rc recursiveiteratoriterator | grep -i constant来查看RecursiveIteratorIterator的常量列表.
缺乏文件
PHP手册中提供的文档完全是由志愿者编写的.特别是SPL是一个痛处,在该区域为船形并且符合标准之前仍有大量工作要做.如果有人想帮忙(不确定SO是否会考虑这个广告?)然后联系我(salathe@php.net)或注册PHP文档邮件列表(发送一封空白电子邮件到phpdoc-subscribe@lists.php .net)并陷入其中.越多越好.
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |