SPLFileObject next()行为

Kat*_*uke 3 php spl

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

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

代码重现:

的test.txt

0
1
2
3
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

从我所看到的,下一个不是在这个部分工作.如果我这样使用它会提前:

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
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这是一个错误或是否是预期的行为?

看着谷歌和PHP论坛,什么都没有出现.提前致谢.

Vol*_*erK 7

如果已设置READ_AHEAD标志,则SPLFileObject :: next()仅起作用.

$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);
Run Code Online (Sandbox Code Playgroud)