PHP, constantes predefinidas SPL
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) .
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
Tome un vistazo a la archivos SPL http://php.net/~helly/php/ext/spl/ .