Я хотел бы повысить слабую связанность в своем 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