当我使用迭代器时,如何在此之后关闭资源。
例如-如果我有这样的生成器方法:
$fileHandler = fopen($filePath, 'r');
while ($line = fgetcsv($fileHandler)) {
yield $line;
}
fclose($fileHandler);
如何确保将调用“ fclose”。
如果我调用生成器并且只从csv中获得前3行,则while循环将暂停,如果不调用下一个值,则不会调用'fclose'。
如何确保文件处理程序将关闭。
答案 0 :(得分:4)
将其放在try
,catch
,finally
块中。最终将始终被执行。
$fileHandler = fopen($filePath, 'r');
try {
while ($line = fgetcsv($fileHandler)) {
yield $line;
}
} catch(Exception $e) {
//Do something with error.
} finally {
fclose($fileHandler);
}
答案 1 :(得分:0)
最好的方法是像这样处理资源
if(is_resource($fileHandler)) fclose($fileHandler);