PHP, SPL önceden tanımlanmış sabitler

2 Cevap php

nereye i SPL predefined constants CHILD_FIRST, SELF_FIRST gibi hakkında bazı referanslar alabilirim? üzerine php.net i (sadece kendi türü) çok alamadım.

2 Cevap

Ben page you linked to adlı sınıfı sabitleri (bazı), daha sonra diğer birkaç puan yükseltmek taslağı olacak.

RecursiveIteratorIterator iteration modes


RecursiveIteratorIterator::LEAVES_ONLY yineleme modu. (Bu default modu içindir.)

Bu yineleme modu (üçünden biri) üzerinde yaprakları olan, (daha fazla şube halinde diğer şube veya, filizlenen dalları bir dizi ile bir ağaç gibi bir özyinelemeli yapının sadece düşünmek "yapraklar" için yineleme sırasında mevcut öğeleri kısıtlar sonu). Dizide array('a'=>array('b','c'),'d','e'=>array('f','g')) yaprakları b, c, d, f ve {[(5) }] onlar sonunda olduğundan, onlar daha fazla öğe filiz yok.

Eylem bu modu gösteren bir kod parçacığını vermek için (farklı modlar ve bayraklar kullanarak özyinelemeli yineleyici yineleyici ile aynı özyinelemeli dizi yineleyici sahip bir dizi örnek olacaktır):

$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

RecursiveIteratorIterator::SELF_FIRST yineleme modu.

Bu yineleme modu yineleme zaman "ana" öğeleri (yani yapraklar) (varsa) çocukları önce yerleştirilmek üzere olduğunu yineleyici bildirir.

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

RecursiveIteratorIterator::CHILD_FIRST yineleme modu.

Bu tür çocuklar öğeleri (yaprak) o üst / alt pozisyonlarda etrafında bu yineleme modu swapları gösterdiği gibi ebeveyn ardından, ilk gelen:

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

Other points

RecursiveIteratorIterator constructor flags

Bu özyinelemeli Yineleyicilerin yinelemek üç modları için sadece sabitleri (ilk sadece, ebeveyn birinci ya da çocuk bırakır) vardır. RecursiveIteratorIterator da bir alt nesne bir istisna atar {bayraklar ise (__toString vb öğeleri aramak için olsun, durdurmak isteyip gibi diğer davranışını etkileyen bir flags argüman undocumented eşit olan [(2)]} sabit).

Other SPL constants

Bu benim bir sonraki noktaya ile bağlar. Sınıfların çoğu bile kendi sabitlerini liste yok: SPL genelinde mevcuttur sabitleri tüm listeler tek, tek elden nokta vardır. Ancak reflection kullanılabilir sabitleri bir göz atmanız için kullanabilirsiniz. Komut satırında RecursiveIteratorIterator en sabitleri bir listesini görmek için php --rc recursiveiteratoriterator | grep -i constant gibi bir şey kullanabilirsiniz.

Lack of documentation

PHP kılavuzunda mevcut belgeler gönüllüler tarafından tamamen (hemen hemen) yazılır. Özellikle SPL hala o bölgede gemi şekli önce çalışma büyük miktarda yapmak için varlık ile bir bamteli up-to-standart. Herkes bu yardım etmek istiyorsa (SO bu reklam düşünecektim eğer emin değil?) Sonra (phpdoc-subscribe@lists.php boş bir mail gönderin bana ulaşın (salathe@php.net) veya PHP belgeleri posta listesine kaydolmak . net) ve daha neşeli içeri takılıyorum.