scrutinizer / resource-manager
提供具有易于使用界面的自动、强大的资源管理
dev-master
2022-03-04 14:02 UTC
Requires
- psr/log: ^1.0|^2.0|^3.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/process: ~2.2
This package is auto-updated.
Last update: 2024-09-04 19:25:00 UTC
README
此库帮助您通过易于使用的界面管理资源。例如,临时文件或目录在离开作用域时会自动清理,后台进程会停止,以及其他任何自定义资源将被销毁。
用法
use Scrutinizer\ResourceManager\ScopedResourceManager; class SomeClass { private $rm; public function __construct(ResourceManager $rm) { $this->rm = new FilesystemResourceManager($rm); } public function run() { $rs = $this->rm->managed(function() { $someTmpFile = $this->rm->createTemporaryFile(); // do something with $someTmpFile return $result; }); // $someTmpFile has been automatically cleaned-up here. } } $someClass = new SomeClass(new ScopedResourceManager()); $someClass->run();
资源管理实现
默认情况下,您可能想使用 ScopedResourceManager
,它允许任意嵌套作用域。此管理器还可以被其他实现包装,例如提供一些便利方法的 FilesystemResourceManager
,它允许您轻松创建管理临时文件或目录。
后台进程
如果您启动了后台进程,例如服务器等,您希望在离开作用域时清理,可以使用资源管理器的 manage
方法
use Scrutinizer\ResourceManager\ScopedResourceManager; use Symfony\Component\Process\Process; class SomeTest extends \PHPUnit_Framework_TestCase { private $rm; public function testSomething() { // The resource manager's global scope will automatically be cleaned up // when PHP calls all object destructors. } protected function setUp() { $this->rm = new ScopedResourceManager(); $proc = new Process('some-server-cmd'); $proc->start(); $this->rm->manage($proc); } }
自定义资源
默认情况下,此库支持临时文件、临时目录和 Symfony 后台进程(使用其 Process 组件)。您还可以通过实现 Scrutinizer\ResourceManager\Resource
创建自己的资源
use Scrutinizer\ResourceManager\Resource; use Scrutinizer\ResourceManager\ScopedResourceManager; class PhpFileResource implements Resource { private $handle; public function __construct($fileHandle) { $this->handle = $fileHandle; } public function destroy() { fclose($this->handle); } } $rm = new ScopedResourceManager(); $rm->manage(new PhpFileResource($someHandle));