SPLFileObject successivo) comportamento (
Domanda
In PHP SPLFileObject permette il trattamento di file come iteratori.
Eppure c'è un comportamento che non capisco. Quando si chiama il prossimo () sull'oggetto incrementa il valore della chiave (), ma non avanza la riga nel file a meno che non si chiama corrente () con ogni iterazione. La documentazione SPL affermano che chiave () restituisce il numero di riga corrente.
codice per riprodurre:
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
Da quello che posso vedere, il prossimo non sta lavorando su questa sezione. Si avanzerà se io uso in questo modo:
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
Qualcuno potrebbe spiegare se questo è un bug o se esso è destinato comportamento?
guardato oltre google e forum php e nulla si avvicinò. Grazie in anticipo.
Soluzione
SPLFileObject :: next () ha effetto solo se il READ_AHEAD è stato fissato a> bandiera.
$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);
Altri suggerimenti
Beh, in ogni caso, perché non lo si utilizza con foreach, come è quello che è destinato?