SPLFileObject próxima () comportamento
Pergunta
Em PHP SPLFileObject permite tratar arquivos como iteradores.
No entanto, há um comportamento que eu não entendo. Quando você chamar next () sobre o objeto que incrementa o valor de chave (), mas não avançar a linha do arquivo a menos que você chamar de corrente () com cada iteração. O estado docs SPL essa chave () retorna o número da linha atual.
Código para reproduzir:
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
Do que eu posso ver, o próximo não está funcionando nesta seção. Ele vai avançar se eu usá-lo desta maneira:
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
Alguém poderia explicar se este é um bug ou que se destine comportamento?
Parecia sobre o Google e fóruns php e nada apareceu. Agradecemos antecipadamente.
Solução
SPLFileObject :: next () só tem efeito se a READ_AHEAD bandeira foi definido.
$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);
Outras dicas
Bem, em qualquer caso, por que não usá-lo com foreach, porque é o que é destinado para?