scrutinizer/resource-manager

提供具有易于使用界面的自动、强大的资源管理

dev-master 2022-03-04 14:02 UTC

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));