如果object limititerator为空,如何编写不运行下面的foreach
的条件?
$numbers = array(5, 19, 8, 35, 50);
$iterator = new ArrayIterator($numbers);
$limiter = new LimitIterator($iterator, 5, 2);
foreach($limiter as $number)
{
echo $number.'<br/>';
}
上面的代码返回这个错误,
Fatal error: Uncaught exception 'OutOfBoundsException' with message 'Seek position 5 is out of range' in ..
OutOfBoundsException: Seek position 5 is out of range in..
如果object limititerator为空,我不想运行
foreach
。编辑:
为什么
$limiter->valid();
总是返回false
?我的网站上有一个page运行下面的代码,$numbers = array(5, 19, 8, 35, 50);
$iterator = new ArrayIterator($numbers);
$limiter = new LimitIterator($iterator, 0, 2);
var_dump($limiter->valid());
if ($limiter->valid())
{
foreach($limiter as $number)
{
echo $number.'<br/>';
}
}
最佳答案
当OutOfBoundsException
在倒带后试图在LimitIterator
循环的最开始处寻找起始偏移量时,foreach
被抛出。
如果要测试寻道位置是否正常,请在rewind()
块中seek()
或手动try/catch
。
try {
$limiter->rewind();
} catch (OutOfBoundsException $e) {
// Do whatever
}
当然,您可以将
foreach
循环包装在try/catch
块中。为什么
$limiter->valid();
总是返回false
?它并不总是返回
false
,只有当它不在有效位置时。脚本中的
LimitIterator
在调用valid()
时,没有被告知要沿着自身或内部迭代器移动任何位置。在调用rewind()
或seek()
之前,它不可能处于有效位置。