Skip to content

General Observation Pattern Component

License

Notifications You must be signed in to change notification settings

subcosm/observatory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

observatory

General Observation Pattern Component

Build Status codecov SensioLabsInsight Code Climate Gittip

What is observatory?

Observatory is a general interface orchestration for observable objects using a container for data transport. It's inspired by the SplObserver implementation of PHP.

What is the goal of observatory?

Providing an easy to use, easy to understand, lightweight event hub to specific implementations without provided methods for each event invoker registration.

How to use it?

Subcosm Observatory is available at Packagist:

# composer require subcosm/observatory ~1.0

Creating the Observable Object

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);
    }
}

Creating an Observer

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

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

Using the Observable and Observer

$observable = new Foo;

$observer = new EchoMessageObserver;

$observable->attach($observer);

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

Results in:

Hello from firstAction!
Another hello from secondAction!

Package Stability and Maintainers

This package is considered stable. The maintainers of this package are:

License

This package is licensed under the MIT-License.