The using PHP package by Ryan Chandler enforces the disposal of objects in PHP. Inspired by Hack and C#, this package is useful when working with file handles:
✨ Just released a new package that brings pseudo-disposal to your PHP code. Inspired by Hack and C#, the `using()` function and `Disposable` interface will enforce disposal of objects. Useful when working will file handles and similar. https://t.co/aEd0jje9mR
— Ryan Chandler (@ryangjchandler) October 19, 2021
The package contains a Disposable
interface and a global using()
function to ensure object disposal.
Given the following class in the readme:
1use RyanChandlerUsingDisposable;
2
3class TextFile implements Disposable
4{
5 private $resource;
6
7 public function dispose(): void
8 {
9 $this->resource = fclose($this->resource);
10 }
11}
The using()
helper ensures the dispose()
method is called even in the event of an exception via finally
:
1// Simple `using()` implementation
2function using(Disposable $disposable, callable $callback): void
3{
4 try {
5 $callback($disposable);
6 } finally {
7 $disposable->dispose();
8 }
9}
10
11// Example usage
12$file = new TextFile('hello.txt');
13using($file, function (TextFile $file) {
14 DB::create('messages', [
15 'message' => $file->contents(),
16 ]);
17});
18
19// The `$resource` property is no-longer a valid stream,
20// since we closed the handle in the `dispose` method.
21var_dump($file->resource);
You can learn more about this package, get full installation instructions, and view the source code on GitHub. In C#, you can learn more about the using statement, which inspired this package.