PHP5+标准函数库观察者之实现
2024-10-20 17:28:15
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 = $value;
//$this->notify();
} public function getValue(){
return $this->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 />
最新文章
- mysql常用方法学习
- jquery.form插件
- ViewController之间的切换动画
- linux服务端的网络编程
- win环境下mysql5.6.14的所有变量的默认值
- HTML3层叠样式表
- exp-00091 oracle错误的解决办法
- iOS坐标转换失败?UIKit的屠神坑
- 【JavaScript中的this详解】
- Splay的初步学习
- SQL-索引-012
- Excel 函数集(使用过的)
- PTA 7-8 哈利&#183;波特的考试(floyd)
- Android开发环境的发展演变调研
- 东芝线阵CCD芯片TCD1305DG驱动时序设计
- Byedance AI Camp-笔试题目
- Java从零开始学六(运算符)
- linux grep命令(linux在文件中搜索内容)
- openresty package.path require 报错
- IOS 触摸事件的处理