kdn/尝试计数器

执行某些操作尝试的抽象计数器。

1.0.1 2022-06-11 13:59 UTC

This package is auto-updated.

Last update: 2024-09-07 18:16:37 UTC


README

执行某些操作尝试的PHP抽象计数器。

License Latest Stable Version Code Coverage Scrutinizer Code Quality Code Climate

需求

  • PHP 5.4 或更高版本或 HHVM 3。

安装

安装此包的首选方法是通过 Composer

安装,运行

php composer.phar require kdn/attempts-counter "*"

或添加

"kdn/attempts-counter": "*"

到您的 composer.json 文件的 require 部分。

使用方法

在网络问题的情况下重复获取URL内容

<?php

use kdn\attemptsCounter\Action;

$contents = false;
$action = new Action('query-url', 10, 3 * 10 ** 9); // up to 10 attempts, 3 seconds delay between attempts
while ($contents === false) {
    $contents = @file_get_contents('https://unreliable.site');
    $action->increment();
}
var_dump($contents);

一个更复杂的示例,说明由于各种原因失败,可以单独配置最大尝试次数和尝试之间的延迟

<?php

use kdn\attemptsCounter\Action;
use kdn\attemptsCounter\AttemptsCounter;

function generateId() {
    return mt_rand(0, 30);
}

$ids = [];
$counter = new AttemptsCounter();
$counter->addAction(new Action('generate-unique', 5))
    ->addAction(new Action('generate-odd', 10));
while (count($ids) < 10) {
    $id = generateId();
    if ($id % 2 === 0) {
        $counter->getAction('generate-odd')->increment();
        continue;
    }
    if (in_array($id, $ids, true)) {
        $counter->getAction('generate-unique')->increment();
        continue;
    }
    $ids[] = $id;
}
var_dump($ids);

有关更多详细信息,请参阅 ActionAttemptsCounter 类的公共方法文档。

测试

确保您已安装所有Composer依赖项(在存储库的基本目录中运行 composer update)。在存储库的基本目录中运行PHPUnit。

./vendor/bin/phpunit

使用Docker测试

需求

  • Docker >= 19.03.0 (安装);
  • Docker Compose >= 1.25.5 (安装);
  • Docker插件

启动并运行

  1. 为Composer提供凭据

    cp auth.json.example \
        auth.json

    建议在 auth.json 中设置GitHub OAuth令牌(也称为个人访问令牌),但是如果您对安全性有疑虑,或者您懒得生成令牌,则可以替换 auth.json 的内容为 {},在大多数情况下这将有效。

  2. 为服务构建镜像

    docker buildx bake --load --pull

    docker buildx bake --load --pull --no-cache --progress plain

    查看 docker buildx bake --help 获取详细信息。

  3. 以后台模式启动服务

    docker-compose up --detach 8.1

    此命令将使用PHP 8.1 启动服务。也允许 7.45.6,请参阅 docker-compose.yml 中定义的服务。

  4. 在运行容器中执行测试

    docker-compose exec 8.1 ./vendor/bin/phpunit

    或者,您可以在运行容器中启动shell并从中执行测试

    docker-compose exec 8.1 bash
    $ ./vendor/bin/phpunit
  5. 停止并删除由 up 创建的容器

    docker-compose down

    您可能希望删除与容器一起的卷

    docker-compose down --volumes

向后兼容性承诺

尝试计数器使用 Semver。这意味着版本被标记为 MAJOR.MINOR.PATCH。只有新的主版本才会被允许破坏向后兼容性(BC)。

PHP 8 引入了 命名参数,这增加了包维护者的成本并降低了灵活性。尝试计数器中方法的参数名称不包括在我们的BC承诺中。