首页 > 代码库 > PHP5+标准函数库观察者之实现
PHP5+标准函数库观察者之实现
PHP的观察者设计模式实现相对简单,但是PHP5+版本中已经有标准库类库支持,我们只需简单继承并实现就可以了。
观察者:实现标准接口类库SplSubject。一个注册方法:attach,一个取消注册方法:detach。一个通知方法:nofity。
<?php class TSPLSubject implements SplSubject{ private $observers, $value; public function __construct(){ $this->observers =array(); } public function attach(SplObserver $observer){ $this->observers[] = $observer; } public function detach(SplObserver $observer){ if($idx = array_search($observer, $this->observers,true)) { unset($this->observers[$idx]); } } /** * * Notify observers one by one (main entry) * * @param none * @return none */ public function notify(){ foreach($this->observers as $observer){ $observer->update($this); } } public function setValue($value){ $this->value = http://www.mamicode.com/$value;>
被观察者:实现标准接口类库SplObserver。一个update方法。<?php class TSPLObserver implements SplObserver{ public function update(SplSubject $subject){ echo 'The new state of subject ' , nl2br("\r\n"); // echo 'The new state of subject '.$subject->getValue(); } }<?php class TSPLObserver1 implements SplObserver{ public function update(SplSubject $subject){ echo 'The new state of subject one ' , nl2br("\r\n"); // echo 'The new state of subject '.$subject->getValue(); } }
测试调用(同目录下):<?php function __autoload($classname) { require_once ($classname . ".php"); } $subject = new TSPLSubject(); $subject->attach(new TSPLObserver()); $observer1 = new TSPLObserver1(); $subject->attach($observer1); //$subject->attach(new TSPLObserver2()); //$subject->detach($observer1); $subject->notify(); exit();
输出:>php basic.php
The new state of subject <br />
The new state of subject one <br />PHP5+标准函数库观察者之实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。