SPLFileObject next()行为

时间:2009-10-01 16:11:37

标签: php spl

在PHP中,SPLFileObject允许将文件视为迭代器。

然而,有一种我不理解的行为。当您在对象上调用next()时,它会增加key()的值,但不会使文件中的行前进,除非您在每次迭代时调用current()。 SPL文档声明key()返回当前行号。

重现的代码:

的test.txt

0
1
2
3

iterator.php

<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->next();
$fi->next();
echo $fi->current() . "\n"; // prints 1, expecting 3
echo $fi->key() . "\n"; //prints 3

从我所看到的,下一部分不适用于本节。如果我以这种方式使用它会进步:

iterator_fix.php

<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->current();
$fi->next();
$fi->current();
$fi->next();
echo $fi->current() . "\n"; // prints 3 as expected
echo $fi->key() . "\n"; //prints 3

有人可以解释这是一个错误还是预期的行为?

查看谷歌和PHP论坛,没有任何结果。提前谢谢。

2 个答案:

答案 0 :(得分:7)

如果已设置READ_AHEAD标志,则SPLFileObject :: next()只有效果。

$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);

答案 1 :(得分:1)

嗯,无论如何,为什么不将它与foreach一起使用,因为它的目的是什么?