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