En PHP SPLFileObject permet de traiter les fichiers comme des itérateurs.SPLFileObject next() comportement
Cependant, il y a un comportement que je ne comprends pas. Lorsque vous appelez next() sur l'objet, il incrémente la valeur de key() mais ne fait avancer la ligne dans le fichier que si vous appelez current() à chaque itération. Les documents SPL indiquent que key() renvoie le numéro de ligne actuel.
Code pour reproduire:
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
D'après ce que je peux voir, la prochaine ne fonctionne pas sur cette section. Il avancera si je l'utilise de cette façon:
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
Quelqu'un pourrait-il expliquer si cela est un bug ou si ce comportement est prévu?
J'ai regardé par-dessus des forums Google et php et rien n'a été fait. Merci d'avance.
Merci pour cette explication, y at-il une raison pour laquelle ce n'est pas le comportement par défaut? Je veux dire, la documentation parle de key() se référant au numéro de ligne. Donc, si je ne mets pas ce drapeau manuellement la clé se référera à une sorte de compteur interne? – Katsuke