ArrayTerator';s valid()始终显示为true


ArrayIterator's valid() always show true

我对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会在迭代后重置迭代器)

:-)