Skip to content

Resource Cleanup

Goal: acquire a resource, use it, and release it even when the use step fails.

php
use Maxiviper117\ResultFlow\Result;

$result = Result::bracket(
    acquire: fn () => fopen($path, 'r'),
    use: fn ($handle) => fread($handle, 100),
    release: fn ($handle) => fclose($handle),
);

Why this pattern works

  • release is attempted after acquisition succeeds
  • use failures are preserved
  • release failures are attached to metadata when use also fails

Variation

If you only need exception-safe execution, consider thenUnsafe(...) inside an exception-aware boundary instead.