eclipxe/engineworks-progress-status

PHP 进度状态库(使用 SPL Subject Observer)

v2.0.2 2024-02-29 18:53 UTC

This package is auto-updated.

Last update: 2024-08-29 20:20:15 UTC


README

Source Code Packagist PHP Version Support Latest Version Software License Build Status Scrutinizer Coverage Status Total Downloads

使用此库来跟踪长时间任务的进度。此库使用 SPL 类来实现 Subject Observer 模式。主题是 Progress 对象,当状态改变时,观察者会收到通知。

安装

使用 composer 安装此库 composer require eclipxe/engineworks-progress-status

基本用法

<?php declare(strict_types=1); 

// Create a new progress instance with the status of 10 total steps and the current message 'Starting...' 
use EngineWorks\ProgressStatus\Progress;
use EngineWorks\ProgressStatus\Status;

/* @var SplObserver $observer */

$pg = new Progress(Status::make(10, 'Starting...'), [$observer]);

/* @var SplObserver $otherObserver */
// add other observer to the progress
$pg->attach($otherObserver);

// This will fire the method update on $observer and $otherObserver with $pg as subject
$pg->increase('Step 1 done');

$status = $pg->getStatus();
echo sprintf(
    "Step %s of %s completed (%0.2f %%) ETA: %s\n",
    $status->getCurrent(),
    $status->getTotal(),
    $status->getRatio(),
    $status->getEstimatedTimeOfEnd() ? date('c', $status->getEstimatedTimeOfEnd()) : '--stalled--',
);

EngineWorks\ProgressStatus\Status

这是一个不可变类,它存储以下内容

  • start - 完整进度开始时的 DateTime 对象。
  • current - 设置当前(最后更新)时间的 DateTime 对象。
  • total - 预期任务的计数。
  • value - 进度的当前值。
  • message - 当前(最后更新)的状态消息。

EngineWorks\ProgressStatus\ProgressInterface

这是进度类的接口。它包含一些需要实现的方法

  • getStatus - 获取进度的当前状态。
  • increase - 更改消息并添加到当前状态的价值。
  • update - 更改完整状态。
  • shouldNotifyChange - 比较两个状态,以确定何时通知观察者。

EngineWorks\ProgressStatus\Progress

这是 ProgressInterface 接口的基本实现,可以直接使用。它将在任何更改时通知所有观察者。

您可以使用此类作为模板来设置不同的通知方式,只需根据您的特定需求覆盖 shouldNotifyChange 方法即可。

EngineWorks\ProgressStatus\ProgressByRatio

这是一个专门的进度(扩展 Progress 类),仅在比例(valuetotal)修改时通知。比例为 0.01 时,不会更新超过 100 次。如果您想每 5% 通知一次,则将比例设置为 0.05。

PHP 支持

此库至少与最古老的 PHP 支持版本 兼容,并具有 活动 支持。请尝试使用 PHP 的全部潜力。

我们遵循 语义化版本控制。我们不会在主要版本中引入任何向后不兼容的更改。

内部类(使用 @internal 注解)不属于此协议,因为它们必须仅存在于此项目中。请不要在您的项目中使用它们。

库版本

  • 版本 1.x 已过时。它将不再接收任何更新。它与 PHP 5.6 到 PHP 8.0 兼容。

  • 版本 2.x 是当前的。它与 PHP 7.3 及更高版本兼容。

贡献

欢迎贡献!请阅读 CONTRIBUTING 以获取详细信息,并不要忘记查看 TODOCHANGELOG 文件。

版权和许可

eclipxe/engineworks-progress-status 库的版权©归 Carlos C Soto 所有,并根据 MIT 许可证(MIT)授权使用。有关更多信息,请参阅 LICENSE