php splobserver,php中spl库观察者模式接口

PHP-SPL标准库中实现了观察者模式接口,PHP内置提供了两个接口来供外部应用区实现这个模式。

http://www.php.net/manual/zh/splobserver.update.php

SplSubject 接口

SplSubject代表着被观察的对象,其结构:interface SplSubject{

//添加(注册)一个观察者

public function attach(SplObserver $observer);

//删除一个观察者

public function detach(SplObserver $observer);

//当状态发生改变时,通知所有观察者

public function notify();

}

SplObserver 接口

SplObserver 代表着充当观察者的对象,其结构:interface SplObserver{

//在目标发生改变时接收目标发送的通知;当关注的目标调用其notify()时被调用

public function update(SplSubject $subject);

}

SplSubject维护了一个特定的状态,在其状态改变时调用 notify()方法,一旦这个方法被调用,任何先前通过 attach()方法注册上来的 SplObserver对象都会以调用其 update()方法的方式被更新。

编程OOPclass MyObserver1 implements SplObserver

{

public function update(SplSubject $subject)

{

echo "MyObserver1 updated\n";

}

}

class MyObserver2 implements SplObserver

{

public function update(SplSubject $subject)

{

echo "MyObserver2 updated\n";

}

}

class MySubject implements SplSubject

{

private $_observers;

private $_name;

public function __construct($name)

{

$this->_observers = new SplObjectStorage();

$this->_name = $name;

}

public function attach(SplObserver $observer)

{

$this->_observers->attach($observer);

}

public function detach(SplObserver $observer)

{

$this->_observers->detach($observer);

}

public function notify()

{

foreach ($this->_observers as $observer) {

$observer->update($this);

}

}

public function getName()

{

return $this->_name;

}

}

测试用例Test Case:

class testDriver

{

public function run()

{

$observer1 = new MyObserver1();

$observer2 = new MyObserver2();

$subject = new MySubject("test");

$subject->attach($observer1);

$subject->attach($observer2);

$subject->notify();

}

}

$test = new testDriver();

$test->run();

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值