PHP, SPL Constantes pré-definidas
Pergunta
Onde posso obter algumas referências sobre SPL predefined constants
como SELF_FIRST
, CHILD_FIRST
? on php.net i não ficar muito (apenas o seu tipo) .
Solução
Eu vou delinear (algumas das) as constantes da classe no href="http://php.net/spl.constants" página é ligada ao em seguida, levantar uma alguns outros pontos.
RecursiveIteratorIterator iteração modos
O modo RecursiveIteratorIterator::LEAVES_ONLY
iteração. (Este é o padrão Modo.)
Este modo iteração (um de três) restringe os itens disponíveis durante a iteração para apenas as "folhas" (pense em uma estrutura recursiva como uma árvore com uma série de ramos brotando outros ramos ou, no caso de não mais ramos, Tendo em folhas no final). No array('a'=>array('b','c'),'d','e'=>array('f','g'))
leque as folhas são b
, c
, d
, f
e g
uma vez que são, no final, eles não fazem brotar mais nenhum item.
Para dar um fragmento de código que mostra este modo de acção (Haverá uma série de exemplos que têm a mesma matriz iteração recursiva com uma iteração iteração recursiva utilizando diferentes modos e bandeiras):
$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
O modo RecursiveIteratorIterator::SELF_FIRST
iteração.
Este modo iteração instrui o iterador que os itens "pai" (ou seja, não folhas) devem ser colocados antes de seus filhos (se houver) quando a iteração.
// 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
O modo RecursiveIteratorIterator::CHILD_FIRST
iteração.
Este modo iteração swaps em torno das posições pai / filho de tal forma que as crianças itens (folhas) vem em primeiro lugar, seguido pelo pai, como demonstrado por:
// 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]
Outros pontos
bandeiras RecursiveIteratorIterator construtor
Essas são apenas as constantes para os três modos (folhas somente, pai primeiros ou criança em primeiro lugar) de iteração iterators sobre recursiva. O RecursiveIteratorIterator também tem um argumento flags
que afeta outro comportamento como se a interrupção se um objeto filho lança uma exceção, se __toString
chamada para os itens, etc. (as bandeiras são constantes CachingIterator
, que estão igualmente em situação irregular).
Outras constantes SPL
Isto está de acordo com o meu próximo ponto. Não existe uma única, one-stop local que lista todas as constantes disponíveis em todo o SPL: a maioria das classes nem sequer listar suas próprias constantes. No entanto, você pode usar reflexão para dar uma olhada em constantes disponíveis. Sobre o uso de linha de comando algo como php --rc recursiveiteratoriterator | grep -i constant
para ver uma lista de constantes do RecursiveIteratorIterator.
A falta de documentação
A documentação disponível no manual do PHP é escrito (praticamente) inteiramente por voluntários. A SPL em particular, é um ponto sensível com ainda ser uma enorme quantidade de trabalho a fazer antes que a área é navio-forma e up-to-padrão. Se alguém quiser ajuda para que (não sei se isso seria considerar esta publicidade?), Em seguida, entrar em contato comigo (salathe@php.net) ou se inscrever para a lista de documentação do PHP mailing (enviar um e-mail em branco para phpdoc-subscribe@lists.php .net) e ficar preso. Quanto mais, melhor.
Outras dicas
Dê uma olhada nas arquivos SPL em http://php.net/~helly/php/ext/spl/ .