liamja/defer

dev-master 2018-02-18 17:39 UTC

This package is not auto-updated.

Last update: 2024-09-29 06:02:29 UTC


README

推迟函数或可调用对象的调用。

为什么?

来自 Go by Example

Defer 用于确保在程序执行过程中稍后执行函数调用,通常用于清理。在需要使用其他语言的 ensurefinally 的场景中,经常使用 defer

常见用例包括

  • 清理临时文件。
  • 关闭网络连接。
  • 关闭数据库连接。

deferfinally 比较,这种 defer 的实现将允许我们更好地控制延迟函数的调用时机;我们可以决定何时开始堆叠延迟函数,以及在哪里最终调用它们。

示例

用法

// Create an instance of Defer.
// When $defer falls out of scope, the deferred callables will be called in reverse order.
$defer = new Defer;

// Push your deferred tasks to the $defer object.
$defer->push(function () {
    echo "I'm echoed last!";
});

// As a convenience, you can also call $defer as a function
$defer(function () {
    echo "I'm echoed second!";
});

echo "I'm called first!";

关闭资源

Defer 可以用于确保关闭打开的文件

$fp = fopen('/tmp/file', 'w');

$defer(function () use ($fp) {
   fclose($fp);
});

fwrite($fp, 'Some temporary data.');