eclipxe / engineworks-progress-status
PHP 进度状态库(使用 SPL Subject Observer)
Requires
- php: >=7.3
Requires (Dev)
- phpunit/phpunit: ^9.5
README
使用此库来跟踪长时间任务的进度。此库使用 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
类),仅在比例(value
与 total
)修改时通知。比例为 0.01 时,不会更新超过 100 次。如果您想每 5% 通知一次,则将比例设置为 0.05。
PHP 支持
此库至少与最古老的 PHP 支持版本 兼容,并具有 活动 支持。请尝试使用 PHP 的全部潜力。
我们遵循 语义化版本控制。我们不会在主要版本中引入任何向后不兼容的更改。
内部类(使用 @internal
注解)不属于此协议,因为它们必须仅存在于此项目中。请不要在您的项目中使用它们。
库版本
-
版本
1.x
已过时。它将不再接收任何更新。它与 PHP 5.6 到 PHP 8.0 兼容。 -
版本
2.x
是当前的。它与 PHP 7.3 及更高版本兼容。
贡献
欢迎贡献!请阅读 CONTRIBUTING 以获取详细信息,并不要忘记查看 TODO 和 CHANGELOG 文件。
版权和许可
eclipxe/engineworks-progress-status
库的版权©归 Carlos C Soto 所有,并根据 MIT 许可证(MIT)授权使用。有关更多信息,请参阅 LICENSE。