PHP, SPL vordefinierte Konstanten
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) .
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
Schauen Sie sich die SPL-Dateien auf http://php.net/~helly/php/ext/spl/ .