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 — Construct a new CachingIterator object for the iterator
- CachingIterator::count — The number of elements in the iterator
- CachingIterator::current — Return the current element
- CachingIterator::getCache — Retrieve the contents of the cache
- CachingIterator::getFlags — Get flags used
- CachingIterator::hasNext — Check whether the inner iterator has a valid next element
- CachingIterator::key — Return the key for the current element
- CachingIterator::next — Move the iterator forward
- CachingIterator::offsetExists — The offsetExists purpose
- CachingIterator::offsetGet — The offsetGet purpose
- CachingIterator::offsetSet — The offsetSet purpose
- CachingIterator::offsetUnset — The offsetUnset purpose
- CachingIterator::rewind — Rewind the iterator
- CachingIterator::setFlags — The setFlags purpose
- CachingIterator::__toString — Return the string representation of the current element
- CachingIterator::valid — Check whether the current element is valid
+添加备注
用户贡献的备注 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.
备份地址:http://www.lvesu.com/blog/php/class.cachingiterator.php