Question

Où puis-je obtenir des références sur SPL predefined constants comme SELF_FIRST, CHILD_FIRST? sur php.net je ne reçois pas beaucoup (juste leur type) .

Était-ce utile?

La solution

Je vais décrire (certaines) des constantes de classe de la page vous avez accédé à puis élever une quelques autres points.

Modes RecursiveIteratorIterator d'itération


Le mode RecursiveIteratorIterator::LEAVES_ONLY itération. (Ceci est le default Mode.)

Ce mode d'itération (l'un des trois) limite les éléments disponibles lors de l'itération pour que les « feuilles » (penser à une structure récursive comme un arbre avec une série de branches poussent d'autres branches ou, dans le cas de pas plus de branches, ayant des feuilles à l'extrémité). Dans le tableau array('a'=>array('b','c'),'d','e'=>array('f','g')) les feuilles sont b, c, d, f et g car ils sont à la fin, ils ne poussent pas plus d'articles.

Pour donner un extrait de code montrant ce mode en action (Il y aura une série d'exemples ayant le même tableau récursif iterator avec un itérateur iterator récursive en utilisant différents modes et drapeaux):

$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

Le mode d'itération de RecursiveIteratorIterator::SELF_FIRST.

Ce mode d'itération indique au iterator que les éléments « parents » (à savoir pas de feuilles) doivent être placés avant que leurs enfants (le cas échéant) lors de l'itération.

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

Le mode d'itération de RecursiveIteratorIterator::CHILD_FIRST.

swaps de mode itération autour des positions parent / enfant de telle sorte que les articles pour enfants (feuilles) viennent en premier, suivi par le parent comme l'a démontré:

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

Autres points de

drapeaux du constructeur de RecursiveIteratorIterator

Ce ne sont que les constantes pour les trois modes (feuilles seulement, parent ou enfant d'abord en premier) de itérer sur itérateurs récursifs. Le RecursiveIteratorIterator a également un argument flags qui affecte d'autres comportements comme l'opportunité de mettre un terme si un objet enfant jette une exception, que ce soit pour appeler __toString pour les articles, etc. (les drapeaux sont des constantes CachingIterator, qui sont également en situation irrégulière).

Autres constantes SPL

Cela correspond à mon point suivant. Il n'y a pas une seule place un guichet unique qui répertorie toutes les constantes disponibles dans le SPL: la plupart des classes ne liste même pas leurs propres constantes. Vous pouvez toutefois utiliser réflexion pour prendre un coup d'oeil à des constantes disponibles. Sur la ligne de commande, utilisez quelque chose comme php --rc recursiveiteratoriterator | grep -i constant pour voir une liste des constantes du RecursiveIteratorIterator.

Le manque de documentation

La documentation disponible dans le manuel PHP est écrit (à peu près) entièrement par des bénévoles. Le SPL en particulier, est un point sensible avec l'existence d'encore une énorme quantité de travail à faire avant que la zone est en forme de bateau et la mise à niveau. Si quelqu'un veut aider dans ce (pas sûr serait donc considérez cette publicité?) Alors contactez-moi (salathe@php.net) ou inscrivez-vous à la liste de diffusion de la documentation PHP (envoyer un email vide à phpdoc-subscribe@lists.php .net) et de se coincer. le plus, on est de fous.

Autres conseils

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top