The Context Library¶
The Context library provides functionality similar to that of Python’s with-statement contexts.
Installation¶
1 | php composer.phar require "korowai/contextlib:dev-master"
|
Basic Usage¶
The library provides with() function, whose
typical use is like
1 2 3 4 5 | use function Korowai\Lib\Context\with;
// ...
with($cm1, ...)(function ($arg1, ...) {
// user's instructions to be executed within context ...
});
|
The arguments $cm1, ... are subject of context management.
with() accepts any value as an argument but only
certain types are context-managed out-of-the box. It supports most of the
standard PHP resources and objects that implement
ContextManagerInterface. A support for other
already-existing types and classes can be added with Context Factories.
For any instance of ContextManagerInterface,
its method enterContext()
gets invoked just before the user-provided callback is called, and
exitContext()
gets invoked just after the user-provided callback returns (or throws an
exception). Whatever $cm#->enterContext() returns, is passed to the
user-provided callback as $arg# argument.
Simple Example¶
A relatively popular use of Python’s with-statement is for automatic
management of opened file handles. Similar goals can be achieved with the
korowai/contextlib and PHP resources. In the following example we’ll
open a file to only print its contents, and a resource context manager will
close it automatically when leaving the context.
The example requires the function with() to be
imported to current scope
1 | use function Korowai\Lib\Context\with;
|
Once it’s done, the following three-liner can be used to open file and read its contents. The file gets closed automatically as soon, as the user callback returns (or throws an exception).
1 2 3 | with(fopen(__DIR__.'/hello.txt', 'r'))(function ($fd) {
echo stream_get_contents($fd)."\n";
});
|