Как правильно использовать компонент Symfony EventDispatcher?

Я хотел бы повысить слабую связанность в своем PHP-коде, сделав некоторые классы наблюдаемыми. Компонент Symfony EventDispatcherвыглядит многообещающе, как и пара классов SPL SplObserver/ SplSubject.

Как лучше всего это сделать?Я вижу несколько разных возможностей:

(1) Внедрить экземпляр EventDispatcher в каждый наблюдаемый класс (отслеживая глобальный экземпляр EventDispatcher):

class Foo
{
    public function __construct($dispatcher)
    {
        $this->dispatcher = $dispatcher;
    }

    public function bar()
    {
        $this->dispatcher->dispatch(...);
    }
}

(2) Пусть наблюдаемый класс расширяет класс EventDispatcher:

class Foo extends EventDispatcher
{
    public function bar()
    {
        $this->dispatch(...);
    }
}

(3) Используйте SplObserver/SplSubject — просто, но не так гибко, как компонент EventDispatcher

9
задан Robert Harvey 29 March 2012 в 20:38
поделиться