文档说“检查双向链表是否包含更多节点”。我不认为这是正确的。
示例
$dlist = new SplDoublyLinkedList;
$data=[1,2,3,4,5];
foreach($data as $d)
$dlist->push($d);
$dlist->rewind();
for($i=0;$i<6;$i++)
{
$currentValue = $dlist->current();
$currentValid = $dlist->valid();
$status = $currentValid ? 'True' : 'False';
echo '当前值是:' . $currentValue . ' 有效状态是:' . $status . "\n";
$dlist->next();
}
输出
当前值是:1 有效状态是:True
当前值是:2 有效状态是:True
当前值是:3 有效状态是:True
当前值是:4 有效状态是:True
当前值是:5 有效状态是:True
当前值是:有效状态是:False
请注意,当我们位于列表的最后一个节点(value = 5)时,valid() 函数返回 true。但我们位于列表的最后一个节点,并且没有更多节点。如果 valid() 函数检查列表中是否有更多节点,它将返回 false,而不是 true。
如果您查看 Iterator::valid 的文档,它们说“检查当前位置是否有效”。我相信这实际上是 valid() 的作用,它检查*当前*位置是否有效,*而不是*是否有更多节点。
注意这一点,否则它会咬你。你可以轻松地迭代到列表的末尾,运行 valid(),认为还有一个节点,执行 next(),获取值,然后你得到 null 而不是列表的最后一个节点。