yield 方式写法跟这种调用的写法什么区别?
//普通方式
function getLines($file){
$file = fopen($file,'r');
try{
while(! feof($file)){
$line = fgets($file);
show($line);
}
}finally{
fclose($file);
}
}
function show($line){
echo $line.'<br>';
}
$data = getLines('1.csv');
//生成器方式
function getLines($file){
$file = fopen($file,'r');
try{
while(! feof($file)){
$line = fgets($file);
yield $line;
}
}finally{
fclose($file);
}
}
$data = getLines('1.csv');
foreach($data as $n=>$line){
echo $line.'<br>';
}
每次进行yield操作, 可以把程序的控制权从函数内移到函数外, 同时可以给yield语句往内传值.