Frage

Wo kann ich einige Referenzen über SPL predefined constants wie SELF_FIRST, CHILD_FIRST? auf php.net ich nicht viel bekommen (nur ihre Art) .

War es hilfreich?

Lösung

Ich werde skizzieren (einige) die Klasse Konstanten aus der Seite Sie verknüpfen dann heben eine einige andere Punkte.

RecursiveIteratorIterator Iteration Modi


Die RecursiveIteratorIterator::LEAVES_ONLY Iteration Modus. (Dies ist der default Modus.)

Diese Iteration Modus (einer von drei) schränkt die verfügbaren Elemente während der Iteration nur auf die „Blätter“ (man denke an eine rekursive Struktur als ein Baum mit einer Reihe von Zweigen sprießen andere Zweige oder, im Falle von nicht mehr Zweige, mit Blättern auf dem Ende). In der Anordnung array('a'=>array('b','c'),'d','e'=>array('f','g')) sind die Blätter b, c, d, f und g, da sie am Ende sind, sie keine mehr Produkte sprießen.

Um einen Code-Schnipsel geben Sie diesen Modus in Aktion (Es wird eine Reihe von Beispielen, den gleichen rekursive Array Iterator mit einem rekursiven Iterator Iterator mit Verwendung verschiedene Modi und Flags):

$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

Der RecursiveIteratorIterator::SELF_FIRST Iteration-Modus.

Diese Iteration Modus weist den Iterator, dass die „Eltern“ Elemente (das heißt nicht Blätter) sind vor ihren Kindern gelegt werden (falls vorhanden), wenn das Iterieren.

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

Der RecursiveIteratorIterator::CHILD_FIRST Iteration-Modus.

Diese Iteration Modus Swaps um die Eltern / Kind-Positionen, so dass die Kinder Gegenstände (Blätter) an erster Stelle, von der Mutter gefolgt wie demonstriert durch:

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

Andere Punkte

RecursiveIteratorIterator Konstruktor Flags

Das sind nur die Konstanten für die drei Modi (nur Blätter, Eltern erste oder Kind zuerst) von über rekursive Iteratoren laufen. Die RecursiveIteratorIterator hat auch ein flags Argument, das wie anderes Verhalten beeinflusst, ob zu stoppen, wenn ein Kind Objekt eine Ausnahme auslöst, ob __toString für die Elemente nennen, usw. (die Flaggen sind CachingIterator Konstanten, die ebenfalls nicht dokumentiert sind).

Andere SPL Konstanten

Dies steht mit meinem nächsten Punkt in. Es gibt keine einzige, One-Stop-Stelle, die alle Konstanten im gesamten SPL aufgeführt: die meisten Klassen nicht einmal ihre eigenen Konstanten aufzulisten. Sie können jedoch Reflexion verwenden, um einen Blick auf verfügbaren Konstanten zu nehmen. Auf der Kommandozeile etwas wie php --rc recursiveiteratoriterator | grep -i constant verwenden, um eine Liste der RecursiveIteratorIterator der Konstanten zu sehen.

Fehlende Dokumentation

Die verfügbare Dokumentation im PHP-Handbuch geschrieben (ziemlich) ausschließlich von Freiwilligen. Die SPL insbesondere ist ein wunder Punkt bei immer noch eine riesige Menge an Arbeit, die zu tun, bevor dieser Bereich Schiffsform ist und up-to-Standard. Wenn jemand will, dass helfen (nicht sicher, ob SO würde diese Werbung betrachten?), Dann kontaktieren Sie mich (salathe@php.net) oder an die PHP-Dokumentation Mailingliste anmelden (eine leere E-Mail an phpdoc-subscribe@lists.php .net) und stecken in. Je mehr, desto besser.

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top