sapiet/processor

该软件包最新版本(0.2.1)的许可信息不可用。

0.2.1 2020-12-21 15:21 UTC

This package is auto-updated.

Last update: 2024-09-22 00:26:02 UTC


README

此软件包允许您处理状态修改。

例如,当您有一个每分钟执行一次的 cron 作业,并且当您的脚本不工作时,您想通知某人,但不是每分钟通知一次!

安装

composer require sapiet/processor

用法

此示例模拟了一个每秒开始抛出异常的脚本。

此配置允许您每 4 秒执行一次操作。

如果省略了 Processor::ERROR_CALLBACK_DELAY_OPTION 选项,回调将只调用一次。

在此示例中,最后一次调用没有抛出异常,因此调用成功回调

<?php

require 'vendor/autoload.php';

use Sapiet\Processor\Processor;
use Sapiet\Processor\Resolvers\ExceptionResolver;
use Sapiet\Processor\Storage\FileStorage;

$processor = (new Processor())
    ->withProcess(function (bool $success, int $sleep = 1) {
        sleep($sleep);

        if (false === $success) {
            throw new \Exception('Failed!');
        }
    })
    ->withResolver(new ExceptionResolver())
    ->withStorage(new FileStorage('processor.txt'))
    ->withOption(Processor::ERROR_CALLBACK_DELAY_OPTION, 4)
    ->onSuccess(function() {
        echo 'Yeah!'.PHP_EOL;
    })
    ->onError(function (array $bag) {
        echo sprintf('Oh noooo (%s)', $bag['exception']->getMessage()).PHP_EOL;
    })
;

$values = array_merge(
    [true],
    array_fill(0, 10, false),
    [true]
);

foreach ($values as $value) {
    $processor->process($value);
}

输出

Oh noooo (failed!)
Oh noooo (failed!)
Oh noooo (failed!)
Yeah!

您还可以使用 BooleanResolver 或根据您的脚本具有不同的行为,通过实现 ResolverInterface 并扩展 BaseResolver 简单地创建自己的。

只有一个可用的存储类,即 FileStorage,但您可以轻松实现自己的存储类,通过实现 StorageInterface