structures sonido significado net data comandos php reference constants spl

sonido - Constantes predefinidas PHP, SPL



spl significado (2)

Eche un vistazo a los archivos SPL en http://php.net/~helly/php/ext/spl/ .

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


Esbozaré (algunas de) las constantes de clase de la página a la que vinculó para luego plantear algunos otros puntos.

RecursiveIteratorIterator modos de iteración

El modo de iteración RecursiveIteratorIterator::LEAVES_ONLY . (Este es el modo predeterminado ).

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

Para dar un fragmento de código que muestre este modo en acción (habrá una serie de ejemplos que tienen el mismo iterador de matriz recursivo con un iterador de iterador recursivo usando diferentes modos y 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 de iteración RecursiveIteratorIterator::SELF_FIRST .

Este modo de iteración indica al iterador que los elementos "principales" (es decir, no hojas) deben colocarse antes de sus hijos (si los hay) al iterar.

// 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 de iteración RecursiveIteratorIterator::CHILD_FIRST .

Este modo de iteración intercambia las posiciones padre / hijo de tal manera que los elementos hijos (hojas) son los primeros, seguidos por los padres 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

RecursiveIteratorIterator constructor flags

Esas son solo las constantes de los tres modos (solo hojas, primero padre o primero hijo) de iterar sobre iteradores recursivos. El RecursiveIteratorIterator también tiene un argumento de flags que afecta a otros comportamientos, como detenerse si un objeto hijo arroja una excepción, si debe llamar a __toString para los elementos, etc. (los indicadores son constantes de CachingIterator , que tampoco están documentados).

Otras constantes de SPL

Esto se relaciona con mi próximo punto. No hay un único punto de ventanilla única que enumere todas las constantes disponibles en todo el SPL: la mayoría de las clases ni siquiera enumeran sus propias constantes. Sin embargo, puede usar la reflexión para echar un vistazo a las constantes disponibles. En la línea de comandos use algo como php --rc recursiveiteratoriterator | grep -i constant php --rc recursiveiteratoriterator | grep -i constant para ver una lista de las constantes del RecursiveIteratorIterator.

La falta de documentación

La documentación disponible en el manual de PHP está escrita (prácticamente) por voluntarios. El SPL, en particular, es un punto doloroso, ya que aún queda mucho trabajo por hacer antes de que el área tenga forma de barco y esté a la altura de los estándares. Si alguien quiere ayudar en eso (¿no está seguro si SO consideraría esta publicidad?), Póngase en contacto conmigo ([email protected]) o regístrese en la lista de correo de la documentación PHP (envíe un correo electrónico en blanco a [email protected] .net) y atascarse. Cuanto más, mejor.