где я могу получить некоторые ссылки о SPL predefined constants
как SELF_FIRST
,CHILD_FIRST
? на php.net я не добираюсь очень (просто их тип).
Я выделю (некоторые из) константы классов со страницы , которую вы связали с , а затем подниму еще несколько вопросов.
Режим итерации 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
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
Итерационный режим 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]
Флаги конструктора RecursiveIteratorIterator
Это только константы для трех режимов (только листья, сначала родительский или сначала дочерний) перебора рекурсивных итераторов.RecursiveIteratorIterator также имеет аргумент flags
, который влияет на другое поведение, например, нужно ли останавливаться, если дочерний объект генерирует исключение, вызывать ли __ toString
для элементов и т. Д. (Флаги CachingIterator
, которые также не документированы).
Другие константы SPL
Это связано с моим следующим тезисом. Не существует единого универсального раздела, в котором перечислены все константы, доступные в SPL: большинство классов даже не перечисляют свои собственные константы. Однако вы можете использовать отражение , чтобы взглянуть на доступные константы. В командной строке используйте что-то вроде php --rc recursiveiteratoriterator | grep -i constant
, чтобы увидеть список констант RecursiveIteratorIterator.
Отсутствие документации
Документация, доступная в руководстве по PHP, написана (в значительной степени) полностью добровольцами. SPL, в частности, является больным местом, поскольку еще предстоит проделать огромный объем работы, прежде чем эта область будет иметь форму корабля и соответствовать стандартам. Если кто-то хочет помочь в этом (не уверен, рассмотрит ли SO эту рекламу?), Тогда свяжитесь со мной (скрыто) или зарегистрируйтесь в списке рассылки документации PHP (отправьте пустое электронное письмо на (скрыто) и застряйте в нем. Более того, тем веселее.
Взгляните на файлы SPL на http://php.net/~helly/php/ext/spl/ .