earc/observer

eArc - 显式架构框架 - psr-14 兼容观察者蓝图

1.1 2021-04-28 07:58 UTC

This package is auto-updated.

Last update: 2024-09-28 15:39:25 UTC


README

earc/observer 是一个现成可扩展的 psr-14 兼容观察者蓝图。

安装

$ composer require earc/observer

引导

earc/observer 使用 earc/di 进行依赖注入。

use eArc\DI\DI;

DI::init();

将上述代码放置在您的脚本/框架引导的章节中。

配置

earc/observer 不需要任何配置。

使用

事件

您的事件必须实现 EventInterface 以便由 earc/observer 的调度器调度。

use eArc\Observer\Interfaces\EventInterface;
use eArc\Observer\Interfaces\ListenerInterface;

class SomeEvent implements EventInterface
{
    public static function getApplicableListener(): array
    {
        return [ListenerInterface::class];     
    }
}

如果您想更具体,可以扩展 ListenerInterface。

注册监听器

您可以使用观察者对象来注册您的监听器

use eArc\Observer\Observer;

$observer = di_get(Observer::class);

$observer->registerListener(SomeListener::class); 

或使用 earc/di 的标记(如果观察者实例尚未构建)

use eArc\Observer\Observer;

di_tag(Observer::class, SomeListener::class); 

提示:标记不会初始化观察者,也不会自动加载观察者类。两者都不会在调用处理事件之前自动加载监听器。

耐心

如果您传递一个 float 作为第二个或第三个参数,它将被解释为耐心。监听器越耐心,它被调用的越晚。

use eArc\Observer\Observer;

$observer = di_get(Observer::class);

$observer->registerListener(SomeListener::class, 0.2); 

或(如果观察者实例尚未构建)

use eArc\Observer\Observer;

di_tag(Observer::class, SomeListener::class, -12.7);

注销监听器

您可以通过以下方式注销

$observer->unregisterListener(SomeListener::class); 

或(如果观察者实例尚未构建)

use eArc\Observer\Observer;

di_clear_tags(Observer::class, SomeListener::class); 

注意 di_tag()di_clear_tags() 的不同语义。

调度事件

要调度您的事件,请使用调度器

use eArc\Observer\Dispatcher;

$dispatcher = di_get(Dispatcher::class);
$event = $dispatcher->dispatch($event); 

它返回可能被监听器修改的事件。

高级用法

如果您想改变观察者的行为,您可以将其装饰为任何实现 ObserverInterface 的类。

use \eArc\Observer\Interfaces\ObserverInterface;

di_decorate(ObserverInterface::class, TheNewObserver::class);

请注意,您项目中使用 earc/observer 的每个库都将在之后使用装饰类。因此,您可能被迫编写自己的调度器。您需要做的就是实现 DispatcherInterface

发布版本

发布 1.1

  • PHP ^7.2 || ^8.0

发布 1.0.3

  • 修复耐心通过标签将浮点数转换为整数
  • 完成文档
  • 测试覆盖率 100% 的文档功能

发布 1.0.2

  • 修复 PHP 无法识别 ['string' => $obj, 'method'] 作为可调用。

发布 1.0.1

  • 添加监听器接口

发布 1.0

  • 重写以兼容 psr-14

发布 0.0

  • 初始发布