我知道 yield 可用于创建数据迭代器,例如从 CSV 文件中读取数据。
function csv_generator($file) {
$handle = fopen($file,"r");
while (!feof($handle)) {
yield fgetcsv($file);
}
fclose($file);
}
但是 Generator::send() 方法表明我可以对顺序写入执行相同的操作,而不是读取。
例如,我想使用这样的东西:
function csv_output_generator($file) {
$handle = fopen('file.csv', 'w');
while (null !== $row = yield) {
fputcsv($handle, $row);
}
fclose($handle);
}
$output_generator = csv_output_generator($file);
$output_generator->send($rows[0]);
$output_generator->send($rows[1]);
$output_generator->send($rows[2]);
// Close the output generator.
$output_generator->send(null);
我认为上述方法会起作用。
但是$output_generator->send(null);
对于关闭似乎是错误的,或者不理想。这意味着我永远不能发送文字空值。这对于 csv 写入是可以的,但也许有一个发送 null 的用例。
有没有使用 php 生成器进行顺序编写的“最佳实践”?