在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
请问这是一个bug还是意图之中的行为?
我在Google和PHP论坛上查找了一下,但没有找到相关内容。提前感谢您的帮助。