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) .

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top