SplFileObject::next

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

SplFileObject::nextRead next line

说明

public SplFileObject::next ( ) : void

Moves ahead to the next line in the file.

参数

此函数没有参数。

返回值

没有返回值。

范例

Example #1 SplFileObject::next() example

<?php
// Read through file line by line
$file = new SplFileObject("misc.txt");
while (!
$file->eof()) {
    echo 
$file->current();
    
$file->next();
}
?>

参见

User Contributed Notes

quijote dot shin at gmail dot com 21-May-2017 09:03
As @Jonnycake  pointed there is no documentation about the following behavior of  next();

You need to call current() to really move forward without the need of a source loop.

Be:
<?php
$file
= new SplFileObject("file.txt");

echo
PHP_EOL . $file->current();
$file->next();
 
$file->next();
 
$file->next();
echo
PHP_EOL . $file->current(); // 2nd line of the file

?>

<?php
$file
= new SplFileObject("file.txt");

echo
PHP_EOL . $file->current();
$file->next(); $file->current();
$file->next(); $file->current();
$file->next();
echo
PHP_EOL . $file->current(); // be the 4th line of the file

?>

Honestly, I don't know if it is  waste of memory and/or CPU .
Jonnycake 02-Dec-2014 05:53
Quick note when using next(), it appears that you have to already be at the end of the line in order for it to hop to the next one.  I realized this while attempting to do a lineCount implementaiton like the following:

<?php
 
function lineCount($file)
  {
    
$x=0;
     while(!
$file->eof()) {
         
$x++;
         
$file->next();
     }
     return
$x;
  }
 
$file=new SplFileObject("something");
  echo
lineCount($file);
?>

It ended up in an infinite loop.  The solution was to just call fgets()/current() in the loop, although it wasn't being used anywhere so the following works:

<?php
 
function lineCount($file)
  {
    
$x=0;
     while(!
$file->eof()) {
         
$file->current();
         
$x++;
         
$file->next();
     }
     return
$x;
  }
 
$file=new SplFileObject("something");
  echo
lineCount($file);
?>