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.

È stato utile?

Altri suggerimenti

Beh, in ogni caso, perché non lo si utilizza con foreach, come è quello che è destinato?

scroll top