CachingIterator クラス
(PHP 5, PHP 7, PHP 8)
はじめに
このオブジェクトは、別のイテレータからキャッシュされた反復処理をサポートします。
クラス概要
/* 定数 */
/* メソッド */
/* 継承したメソッド */
}定義済み定数
CachingIterator::CALL_TOSTRING
-
それぞれの要素を文字列に変換します
CachingIterator::CATCH_GET_CHILD
-
子要素にアクセスする際、例外をスローしません
CachingIterator::TOSTRING_USE_KEY
-
文字列に変換する際に key を使います。
CachingIterator::TOSTRING_USE_CURRENT
-
文字列に変換する際に current を使います。
CachingIterator::TOSTRING_USE_INNER
-
文字列に変換する際に inner を使います。
CachingIterator::FULL_CACHE
-
読み込んだデータを全てキャッシュします。
変更履歴
バージョン | 説明 |
---|---|
8.0.0 | CachingIterator は、 Stringable を新たに実装しました。 |
目次
- CachingIterator::__construct — 新しい CachingIterator オブジェクトを作成する
- CachingIterator::count — イテレータ内の要素の数
- CachingIterator::current — 現在の要素を返す
- CachingIterator::getCache — キャッシュの内容を取得する
- CachingIterator::getFlags — 使用しているフラグを取得する
- CachingIterator::hasNext — 内部イテレータが有効な次の要素を持つかどうかをチェックする
- CachingIterator::key — 現在の要素のキーを返す
- CachingIterator::next — イテレータを前方に移動する
- CachingIterator::offsetExists — The offsetExists purpose
- CachingIterator::offsetGet — The offsetGet purpose
- CachingIterator::offsetSet — The offsetSet purpose
- CachingIterator::offsetUnset — The offsetUnset purpose
- CachingIterator::rewind — イテレータを巻き戻す
- CachingIterator::setFlags — The setFlags purpose
- CachingIterator::__toString — 現在の要素の文字列表現を返す
- CachingIterator::valid — 現在の要素が有効かどうかをチェックする
+add a note
User Contributed Notes 4 notes
ahmad dot mayahi at gmail dot com ¶
4 years ago
The only difference between CachingIterator and other Iterators such as ArrayIterator is the hasNext() method.
Since the data will be loaded into the memory, the CachingIterator is able to check whether the given iterator has a next element.
Let's demonstrate this by an example:
<?php
$iterator = new CachingIterator(new ArrayIterator(['C', 'C++', 'C#', 'PHP', 'Python', 'Go', 'Ruby']));
foreach ($iterator as $item) {
if ($iterator->hasNext()) {
echo $item.', ';
} else {
echo 'and '.$item;
}
}
// C, C++, C#, PHP, Python, Go, and Ruby
?>
In this example I check whether the iterator has a next value, if so, I append a comma otherwise "and" will be appended to the last element.
ahmad dot mayahi at gmail dot com ¶
8 years ago
<?php
//This snippet will print out all the cached elements (foreach) .
$cache = new CachingIterator(new ArrayIterator(range(1,100)), CachingIterator::FULL_CACHE);
foreach ($cache as $c) {
}
print_r($cache->getCache());
?>
jerome at chaman dot ca ¶
5 years ago
"cached iteration over another iterator" means this iterator is always one step behind the inner iterator. In other words, the "first" iteration will yield null:
<?php
$cit = new CachingIterator( new ArrayIterator( [ 'a', 'b', 'c'] ) );
echo $cit->current() ); // null
echo $cit->getInnerIterator()->current() ); // "a"
while($cit->hasNext()){
// we start with a "next" since the "first" item is null
$cit->next();
echo $cit->current(), '<br>';
}
?>
iterating this way gives us an access, ahead, to the future item (aka current item of the inner iterator)
xedin dot unknown at gmail dot com ¶
4 years ago
Apparently, the `FULL_CACHE` flag automatically cancels the default flag `CALL_TOSTRING`. This is evident when one of the values cannot be converted to string: with the default `CALL_TOSTRING` flag, it would throw an error; without that flag, or with the `FULL_CACHE` flag, it does not.