我对ArrayIterator::valid()
方法有问题。它总是真实的。我不知道是我不明白它应该如何工作,还是我做错了什么。。。
我使用条令的传呼机
http://www.doctrine-project.org/api/orm/2.1/source-class-Doctrine.ORM.Tools.Pagination.Paginator.html
它确实实现了'Countable
和'IteratorAggregate
。方法getIterator()
返回'ArrayIterator
。
我认为:
<?php foreach ($this->paginator as $message): ?>
<?php var_dump($this->paginator->valid()); ?> // Fatal error. Method does not exist
<?php var_dump($this->paginator->getIterator()->valid()); ?> // <-- it always return true
<p>Teeeeeest</p>
<?php endforeach; ?>
我也试过:
<?php $paginator = $this->paginator->getIterator(); ?>
<?php foreach ($paginator as $message): ?>
<?php var_dump($paginator->valid()); ?> // <-- it always return true
<p>Teeeeeest</p>
<?php endforeach; ?>
var_dump($this->paginator)
显示我有2条记录。所以我应该在第一次迭代中得到true
,在第二次迭代中获得false
。我说得对吗?那么为什么它总是返回true
foreach只接受有效的条目,因此$paginator->valid()
在这一点上始终有效。如果使用$paginator->next()
,则在处理完最后一个条目后将以false
结束。
因此$paginator->valid()
与不在foreach
内的$paginator->next()
一起使用
试着这样测试。
$paginator->reset();
while($paginator->valid()){
$entrie = $paginator->current();
$paginator->next();
}
或在前臂后用CCD_ 16检测。(但可能foreach会在迭代后重置迭代器)
:-)