Fast Forward Deferred Callbacks utility classes

Basic Usage

This section demonstrates the core usage patterns of FastForward Defer, including basic and advanced scenarios.

use FastForward\Defer\Defer;

$defer = new Defer();

$defer(function () {
    echo "First defer\n";
});

$defer(function () {
    echo "Second defer\n";
});

echo "Inside function\n";

Output:

Inside function
Second defer
First defer

Arguments

Deferred callbacks receive the arguments you provide:

$defer(function ($file) {
    echo "Deleting {$file}\n";
}, 'temp.txt');

echo "Working...\n";

Output:

Working...
Deleting temp.txt

Execution Order

Callbacks execute in reverse order of registration (LIFO):

$defer(fn() => unlink($file));
$defer(fn() => fclose($handle));

Output:

fclose($handle)
unlink($file)

Always register in reverse of the desired execution order.

Exception Safety

Deferred callbacks always run, even if an exception occurs:

$defer(fn() => print "Cleanup\n");
throw new Exception('Failure');

Output:

Cleanup
Exception caught

Nested Scopes

Each Defer instance is isolated:

function outer(): void {
    $defer = new Defer();
    $defer(fn() => print "Outer cleanup\n");
    inner();
}

function inner(): void {
    $defer = new Defer();
    $defer(fn() => print "Inner cleanup\n");
}

outer();

Output:

Inner cleanup
Outer cleanup

Search results