📅  最后修改于: 2023-12-03 15:03:36.385000             🧑  作者: Mango
CachingIterator
是一个PHP的内置类,主要提供了缓存遍历功能。current()
函数是其中的一个方法,用于获取当前指向的元素。
public CachingIterator::current( void ) : mixed
该函数没有参数。
返回当前指向的元素。
如果还没有调用CachingIterator::next()
函数、或调用CachingIterator::next()
函数后指向的元素为空,current()
函数都将返回null
。
$numbers = new ArrayIterator([1, 2, 3, 4, 5]);
$cachedNumbers = new CachingIterator($numbers);
while ($cachedNumbers->valid()) {
echo $cachedNumbers->current() . ' '; // 输出当前指向的元素
$cachedNumbers->next(); // 指向下一个元素
}
// 输出:1 2 3 4 5
CachingIterator
类构造函数的第一个参数必须是一个迭代器对象。如果需要获取这个迭代器对象,可以使用getInnerIterator()
方法。
$numbers = new ArrayIterator([1, 2, 3, 4, 5]);
$cachedNumbers = new CachingIterator($numbers);
var_dump($cachedNumbers->getInnerIterator());
// 输出:
// object(ArrayIterator)#1 (1) {
// ["storage":"ArrayIterator":private]=>
// array(5) {
// [0]=>
// int(1)
// [1]=>
// int(2)
// [2]=>
// int(3)
// [3]=>
// int(4)
// [4]=>
// int(5)
// }
// }
如果需要在迭代过程中多次遍历同一个迭代器(即在第一次迭代结束后,再次从头开始迭代),使用NoRewindIterator
类来包装目标迭代器,以避免调用rewind()
方法导致内部缓存丢失。
$numbers = new ArrayIterator([1, 2, 3, 4, 5]);
$cachedNumbers = new CachingIterator(new NoRewindIterator($numbers));
while ($cachedNumbers->valid()) {
echo $cachedNumbers->current() . ' ';
if ($cachedNumbers->key() == 2) {
// 第一次迭代结束后,再次从头开始迭代
$cachedNumbers->getInnerIterator()->rewind();
}
$cachedNumbers->next();
}
// 输出:1 2 3 1 2 3 4 5