如何在生成器函数中关闭php资源

时间:2019-05-13 09:32:45

标签: javascript php

当我使用迭代器时,如何在此之后关闭资源。

例如-如果我有这样的生成器方法:

$fileHandler = fopen($filePath, 'r');

while ($line = fgetcsv($fileHandler)) {
    yield $line;
}

fclose($fileHandler);

如何确保将调用“ fclose”。

如果我调用生成器并且只从csv中获得前3行,则while循环将暂停,如果不调用下一个值,则不会调用'fclose'。

如何确保文件处理程序将关闭。

2 个答案:

答案 0 :(得分:4)

将其放在trycatchfinally块中。最终将始终被执行。

$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);