subcosm/观测站

通用观测模式组件

v1.1 2017-04-07 22:09 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:48:12 UTC


README

通用观测模式组件

Build Status codecov SensioLabsInsight Code Climate Gittip

什么是观测站?

观测站是一个通用接口编排工具,用于使用数据传输容器进行可观察对象。它受到 PHPSplObserver 实现的启发。

观测站的目标是什么?

提供一个易于使用、易于理解、轻量级的事件中心,为特定实现提供无需为每个事件调用者注册方法的方法。

如何使用它?

Subcosm 观测站在 Packagist 上可用

# composer require subcosm/observatory ~1.0

创建可观察对象

use Subcosm\Observable\{
    ObservableInterface,
    ObservableTrait,
    AbstractObservationContainer as Container
};

class Foo implements ObservableInterface {
    use ObservableTrait;
    
    public function firstAction()
    {
        $message = 'Hello from firstAction!';
    
        $container = new class($this, __METHOD__, $message) extends Container {
            
            protected $message;
            
            public function __construct($object, string $stage, string $message) 
            {
                $this->message = $message;
                
                parent::__construct($object, $stage);
            }
            
            public function getMessage()
            {
                $this->message;
            }
        };
        
        $this->notify($container);
    }
    
    public function secondAction()
    {
        $message = 'Another hello from secondAction!';
            
        $container = new class($this, __METHOD__, $message) extends Container {
            
            protected $message;
            
            public function __construct($object, string $stage, string $message) 
            {
                $this->message = $message;
                
                parent::__construct($object, $stage);
            }
            
            public function getMessage()
            {
                $this->message;
            }
        };
        
        $this->notify($container);
    }
}

创建观察者

use Subcosm\Observable\{
    ObserverInterface,
    ObservationContainerInterface as Container
};

class EchoMessageObserver implements ObserverInterface {
    
    public function update(Container $container)
    {
        echo $container->getMessage().PHP_EOL;
    }
    
}

使用可观察对象和观察者

$observable = new Foo;

$observer = new EchoMessageObserver;

$observable->attach($observer);

$observable->firstAction();
$observable->secondAction();

结果

Hello from firstAction!
Another hello from secondAction!

包稳定性与维护者

此包被认为是稳定的。此包的维护者是

许可协议

此包根据 MIT 许可证 许可。