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.