Класс CachingIterator
(PHP 5)
Введение
Этот объект поддерживает кеширование итерации над другим итератором.
Обзор классов
CachingIterator
extends
IteratorIterator
implements
OuterIterator
,
Traversable
,
Iterator
,
ArrayAccess
,
Countable
{
/* Константы */
/* Методы */
}Предопределенные константы
CachingIterator::CALL_TOSTRING
-
Преобразует каждый элемент в строку.
CachingIterator::CATCH_GET_CHILD
-
Не выбрасывать исключения при доступе к дочерним элементам.
CachingIterator::TOSTRING_USE_KEY
-
Использовать ключ при преобразовании в строку.
CachingIterator::TOSTRING_USE_CURRENT
-
Использовать текущий элемент при преобразовании в строку.
CachingIterator::TOSTRING_USE_INNER
-
Использовать внутренний итератор при преобразовании в строку.
CachingIterator::FULL_CACHE
-
Кеширование всей прочтенной информации.
Содержание
- CachingIterator::__construct — Строит новый объект CachingIterator для итератора
- CachingIterator::count — Возвращает число элементов в итераторе
- CachingIterator::current — Возвращает текущий элемент
- CachingIterator::getCache — Назначение getCache
- CachingIterator::getFlags — Получает используемые флаги
- CachingIterator::getInnerIterator — Возвращает внутренний итератор
- CachingIterator::hasNext — Проверяет, имеет ли внутренний итератор допустимый следующий элемент
- CachingIterator::key — Возвращает ключ для текущего элемента
- CachingIterator::next — Перемещает итератор к следующему элементу
- CachingIterator::offsetExists — Назначение offsetExists
- CachingIterator::offsetGet — Назначение offsetGet
- CachingIterator::offsetSet — Назначение offsetSet
- CachingIterator::offsetUnset — Назначение offsetUnset
- CachingIterator::rewind — Возвращает итератор в начало
- CachingIterator::setFlags — Назначение setFlags
- CachingIterator::__toString — Возвращает строковое представление текущего элемента
- CachingIterator::valid — Проверяет, является ли текущий элемент допустимым
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Класс AppendIterator
- Класс ArrayIterator
- Класс CachingIterator
- Класс CallbackFilterIterator
- Класс DirectoryIterator
- Класс EmptyIterator
- Класс FilesystemIterator
- Класс FilterIterator
- Класс GlobIterator
- Класс InfiniteIterator
- Класс IteratorIterator
- Класс LimitIterator
- Класс MultipleIterator
- Класс NoRewindIterator
- Класс ParentIterator
- Класс RecursiveArrayIterator
- Класс RecursiveCachingIterator
- Класс RecursiveCallbackFilterIterator
- Класс RecursiveDirectoryIterator
- Класс RecursiveFilterIterator
- Класс RecursiveIteratorIterator
- Класс RecursiveRegexIterator
- Класс RecursiveTreeIterator
- Класс RegexIterator
Коментарии
<?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());
?>
"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)
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.
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.