SPLFileObject sonraki () davranış

2 Cevap php

PHP SPLFileObject yılında Yineleyicilerin gibi dosyaları tedavi sağlar.

Ama ben anlamıyorum bir davranış yoktur. Eğer bir nesne üzerinde bir sonraki () çağırdığınızda anahtarının değerini artırır () ama güncel () çağrısı sürece her yineleme ile dosyadaki satır ilerletmek değil. SPL docs o anahtarı () geçerli satır numarasını döndürür devlet.

Yeniden Kod:

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

I ne görebilirsiniz itibaren, bir sonraki bu bölümde üzerinde çalışmıyor. Ben bunu bu şekilde kullanmak eğer ilerlemek olacaktır:

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

Bu bir hata veya hedeflenen ise davranış olup olmadığını kimse açıklayabilir misiniz?

Google ve php forumlarda baktı ve hiçbir şey geldi. Şimdiden teşekkürler.

2 Cevap

READ_AHEAD bayrak ayarlanmış olup olmadığını SPLFileObject :: sonraki () yalnızca bir etkisi vardır.

$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);

Peki, herhangi bir durumda, neden bunun için tasarlanmıştır ne olduğu gibi, foreach ile kullanmak değil mi?