jimjam88 /observer
具有C#样式的事件参数的PHP观察者模式
dev-master
2015-09-14 08:36 UTC
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-28 18:10:39 UTC
README
非常简单的PHP观察者模式,具有C#样式的事件参数。
用法
通过扩展 Observer\Subject\SubjectAbstract
或实现 Observer\Subject\SubjectInterface
来创建一个主题...
use Observer\Subject\SubjectAbstract; class Subject extends SubjectAbstract { }
创建一个将被发布给观察者的事件。所有事件参数 必须 扩展 Observer\Event\EventArgs
use Observer\Event\CallbackEventArgs; class Event extends CallbackEventArgs { /** * Some event args info * * @var string */ protected $info; /** * Gets the value of info. * * @return string */ public function getInfo() { return $this->info; } /** * Sets the value of info. * * @param string $info the info * @return self */ public function setInfo($info) { $this->info = $info; return $this; } }
现在创建一些观察者。观察者必须实现 Observer\Observer\ObserverInterface
use Observer\Observer\ObserverInterface; use Observer\Event\EventArgs; class ObserverA implements ObserverInterface { public function notify(EventArgs $args) { var_dump(__CLASS__); var_dump($args->getInfo()); call_user_func($args->getCallback()); } } class ObserverB implements ObserverInterface { public function notify(EventArgs $args) { var_dump(__CLASS__); var_dump($args->getInfo()); call_user_func($args->getCallback()); } }
现在把它全部组合起来...
// Instantiate the subject $subject = new Subject(); // ...and attach the observers $subject->attach(new ObserverA()); $subject->attach(new ObserverB()); // Create an event $event = new Event(); $event->setInfo('Hello, World!'); $event->setCallback(function() { var_dump('Hello, callback!'); }); // Notify the observers of the event $subject->notify($event);
上面的代码将输出
string(9) "ObserverA" string(13) "Hello, World!" string(16) "Hello, callback!" string(9) "ObserverB" string(13) "Hello, World!" string(16) "Hello, callback!"