PHP5.1以上自带了观察者、被观察者模式的接口:SplSubject
<?php$user->login();//通知观察者改变的内容
下面是不用PHP自带的函数实现观察者模式:
<?php
class
Paper{
/* 主题 */
private
$_observers
=
array
();
public
function
register(
$sub
){
/* 注册观察者 相当于attach*/
$this
->_observers[] =
$sub
;
}
public
function
trigger(){
/* 外部统一访问 相当于notify*/
if
(!
empty
(
$this
->_observers)){
foreach
(
$this
->_observers
as
$observer
){
$observer
->update();
}
}
}
}
/**
* 观察者要实现的接口
*/
interface
Observerable{
public
function
update();
}
class
Subscriber
implements
Observerable{
public
function
update(){
echo
"Callback\n"
;
}
}
下面是测试代码
/* 测试 */
$paper
=
new
Paper();
$paper
->register(
new
Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper
->trigger();
|