splsubject 和 splobserver 接口
the splsubject interface is used alongside splobserver to implement the observer design pattern.
观察者模式是一种简单的事件系统,包含了两个或更多的互相交互的类。这一模式允许某个类观察另一个类的状态,当被观察类的状态发生变化时,这个模式会得到通知。被观察的类叫subject,负责观察的类叫做observer 。php 提供的 splsubject 和 splobserver接口可用来表达这些内容。
splsubject {/* 方法 */abstract public void attach ( splobserver $observer )abstract public void detach ( splobserver $observer )abstract public void notify ( void )}
splobserver {/* 方法 */abstract public void update ( splsubject $subject )}
这里,splsubject类维护了一个特定状态,当这个状态发生变化时,他就会调用notify方法,所以之前使用attach注册的splobserver实例的update就会被调用。这里我们实现一个简单地观察者模式的例子
name = $name; } //add observer public function attach(\splobserver $observer) { $this->observers[] = $observer; } //remove observer public function detach(\splobserver $observer) { $key = array_search($observer,$this->observers, true); if($key){ unset($this->observers[$key]); } } //set breakouts news public function breakoutnews($content) { $this->content = $content; $this->notify(); } public function getcontent() { return $this->content. ({$this->name}); } //notify observers(or some of them) public function notify() { foreach ($this->observers as $value) { $value->update($this); } }}/** * observer,that who recieves news */class reader implements splobserver{ private $name; public function __construct($name) { $this->name = $name; } public function update(\splsubject $subject) { echo $this->name.' is reading breakout news '.$subject->getcontent().'
'; }}$newspaper = new newspaper('newyork times');$allen = new reader('allen');$jim = new reader('jim');$linda = new reader('linda');//add reader$newspaper->attach($allen);$newspaper->attach($jim);$newspaper->attach($linda);//remove reader$newspaper->detach($linda);//set break outs$newspaper->breakoutnews('usa break down!');//=====output======//allen is reading breakout news usa break down! (newyork times)//jim is reading breakout news usa break down! (newyork times)
http://www.bkjia.com/phpjc/814842.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/814842.htmltecharticlespl(标准php库 - standard php library)是php5面向对象功能中重要的部分。原文解释是这样的the standard php library (spl) is a collection of interfaces and c...
