Domanda

dove posso trovare alcuni riferimenti circa SPL predefined constants come SELF_FIRST, CHILD_FIRST? php.net non ho ricevuto molto (solo il loro tipo) .

È stato utile?

Soluzione

Ti Outline (alcune) costanti della classe dalla pagina href="http://php.net/spl.constants" rel="noreferrer"> poi alzare un alcuni altri punti.

modalità RecursiveIteratorIterator iterazione


Il RecursiveIteratorIterator::LEAVES_ONLY iterazione modalità. (Questo è il default Modalità.)

Questa modalità iterazione (uno dei tre) limita i prodotti disponibili nella iterazione solo le "foglie" (pensare ad una struttura ricorsiva come un albero con una serie di rami spuntano altri rami o, nel caso di altri rami, avente foglie sull'estremità). Nella matrice array('a'=>array('b','c'),'d','e'=>array('f','g')) le foglie sono b, c, d, f e g dal momento che sono alla fine, non germogliano eventuali altri elementi.

Per dare un frammento di codice che mostra questa modalità in azione (Ci sarà una serie di esempi aventi lo stesso iteratore matrice ricorsiva con un iteratore iteratore ricorsivo utilizzando modalità e bandiere):

$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

La modalità RecursiveIteratorIterator::SELF_FIRST iterazione.

Questa modalità di iterazione indica al iteratore che le voci "controllanti" (vale a dire non foglie) sono da collocare prima che i loro figli (se del caso) quando l'iterazione.

// 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

La modalità RecursiveIteratorIterator::CHILD_FIRST iterazione.

swap Questa modalità di iterazione intorno alle posizioni di genitore / bambino così che le voci dei bambini (foglie) vengono prima, seguita dal genitore come dimostrato da:

// 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]

Altri punti

bandiere costruttore RecursiveIteratorIterator

Queste sono solo le costanti per le tre modalità (lascia solo, genitore o figlio prima prima) di iterare su iteratori ricorsive. Il RecursiveIteratorIterator ha anche un argomento che interessa flags altri comportamenti, come se per fermare se un oggetto figlio genera un'eccezione, se chiamare __toString per le voci, ecc (le bandiere sono costanti CachingIterator, che sono altrettanto privi di documenti).

Altre costanti SPL

Questa lega con mio prossimo punto. Non v'è nessun punto singolo, one-stop, che elenca tutte le costanti disponibili in tutto lo SPL: la maggior parte delle classi non hanno nemmeno elencare i loro propri costanti. È tuttavia possibile utilizzare riflessione per dare uno sguardo a costanti disponibili. Nella riga di comando usare qualcosa come php --rc recursiveiteratoriterator | grep -i constant per visualizzare un elenco di costanti del RecursiveIteratorIterator.

La mancanza di documentazione

La documentazione disponibile nel manuale di PHP è scritto (più o meno) interamente da volontari. La SPL, in particolare, è un punto dolente con là essendo ancora una quantità enorme di lavoro da fare prima che la zona è a forma di nave e up-to-standard. Se qualcuno vuole aiutare in questo (non so se così sarebbe prendere in considerazione questa pubblicità?) Quindi contattare me (salathe@php.net) o iscriversi per la documentazione di PHP mailing list (inviare un'email vuota a phpdoc-subscribe@lists.php .net) e rimanere bloccati in. Quanto più siamo, meglio è.

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top