Pregunta

¿Dónde puedo conseguir algunas referencias sobre SPL predefined constants como SELF_FIRST, CHILD_FIRST? en php.net no consigo mucho (sólo su tipo) .

¿Fue útil?

Solución

Contornearé (algunas de) las constantes de la clase en la página href="http://php.net/spl.constants" rel="noreferrer"> algunos otros puntos.

modos RecursiveIteratorIterator iteración


El RecursiveIteratorIterator::LEAVES_ONLY iteración modo. (Este es el por defecto Modo.)

Este modo de iteración (uno de tres) restringe los elementos disponibles durante la iteración sólo a las "hojas" (piensa en una estructura recursiva como un árbol con una serie de ramas que brotan otras ramas o, en el caso de no más ramas, que tiene hojas en el extremo). En la matriz array('a'=>array('b','c'),'d','e'=>array('f','g')) las hojas son b, c, d, f y g ya que son al final, que no brotan más elementos.

Para dar un fragmento de código que muestra este modo en la acción (Habrá una serie de ejemplos que tienen el mismo iterador array recursiva con un iterador iterador recursivo utilizando diferentes modos y las banderas):

$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

El modo RecursiveIteratorIterator::SELF_FIRST iteración.

Este modo iteración instruye el iterador que los artículos "padre" (es decir, no son hojas) para colocarse delante de sus hijos (si los hay) cuando se repite.

// 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

El modo RecursiveIteratorIterator::CHILD_FIRST iteración.

permutas Este modo de iteración alrededor de los padre / hijo posiciones tales que los artículos infantiles (hojas) son lo primero, seguido por el padre como lo demuestra:

// 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]

Otros puntos

banderas RecursiveIteratorIterator constructor

Estas son sólo las constantes para los tres modos (hojas solamente, padre o hijo primero primero) de la iteración en iteradores recursivas. El RecursiveIteratorIterator también tiene un argumento flags que afecta a otros comportamientos como si para detener si un objeto secundario se produce una excepción, si llamar a __toString de los artículos, etc. (las banderas son constantes CachingIterator, que son igualmente indocumentado).

Otras constantes SPL

Esto se relaciona con el siguiente punto. No hay una sola mancha, una ventanilla que enumera todas las constantes disponibles en todo el SPL: la mayoría de las clases ni siquiera una lista de sus propias constantes. Sin embargo, puede utilizar reflexión a echar un vistazo a las constantes disponibles. En la línea de comando usar algo como php --rc recursiveiteratoriterator | grep -i constant para ver una lista de constantes de la RecursiveIteratorIterator.

La falta de documentación

La documentación disponible en el manual de PHP está escrito (más o menos) en su totalidad por voluntarios. El SPL en particular, es un punto sensible con no dejar de ser una enorme cantidad de trabajo por hacer antes de que el área es forma de barco y esté a la altura. Si alguien quiere ayudar en ese (no estoy seguro si es así parece que es la publicidad?), Contacta conmigo (salathe@php.net) o inscribirse a la lista de correo de documentación de PHP (enviar un correo electrónico en blanco a phpdoc-subscribe@lists.php .net) y quedar atrapado en. Cuanto más, mejor.

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top