...

<?php
/*
The observer pattern implements a one-too-many dependency between objects. The
object that holds the list of dependencies is called subject, while the dependents are
called observers. When the subject object changes state, all of the dependents are
notified and updated automatically.
*/

class Customer implements \SplSubject {
    protected $data = array();
    protected $observers = array();

    public function attach(\SplObserver $observer) {
        $this->observers[] = $observer;
    }

    public function detach(\SplObserver $observer) {
        $index = array_search($observer, $this->observers);
        if ($index !== false) {
            unset($this->observers[$index]);
        }
    }

    public function notify() {
        foreach ($this->observers as $observer) {
            $observer->update($this);
            echo 'Customer_observer updated.<br/>';
        }
    }

    public function __set($name, $value) {
        $this->data[$name] = $value;
        $this->notify();
    }
}

class CustomerObserver implements \SplObserver {
    public function update(\SplSubject $subject) {
        echo "CustomerObserver_update.<br/>";
    }
}

$user = new Customer;
$customerObserver = new CustomerObserver();
$user->attach($customerObserver);

$user->name = 'John Doe';
$user->email = 'john.doe@fake.com';

?>

最新文章

  1. Openstack+Kubernetes+Docker微服务实践之路--基础设施
  2. [原创]Android系统中常用JAVA类源码浅析之HashMap
  3. lambda 表达式
  4. G面经prepare: Data Stream Average
  5. 【计算机视觉领域】常用的 feature 提取方法,feature 提取工具包
  6. javascript数组详解
  7. Kakfa揭秘 Day4 Kafka中分区深度解析
  8. 支持IE6以上阴影效果纯CSS
  9. HDOJ-ACM1021(JAVA)
  10. 菜鸟必须知道的linux的文件目录结构
  11. TTimerThread和TThreadedTimer(都是通过WaitForSingleObject和CreateEvent来实现的)
  12. spring jar包
  13. C语言程序设计基础-第1周作业-初步
  14. 【java集合系列】--- LinkedList
  15. EF批量插入数据(Z.EntityFramework.Extensions)
  16. Cacti的使用
  17. 【译】AI 让科技公司变得更强大吗
  18. 加载依赖的jar包在命令行编译和运行java文件
  19. 查看APK包签名的方法。
  20. BZOJ 4036: [HAOI2015]按位或 集合幂函数 莫比乌斯变换 莫比乌斯反演

热门文章

  1. HTTP协议COOKIE和SESSION有什么区别
  2. 第02组 Beta冲刺(3/4)
  3. 8.10 NOIP模拟测试16 Blue+Weed+Drink
  4. [LeetCode] 922. Sort Array By Parity II 按奇偶排序数组之二
  5. [LeetCode] 210. Course Schedule II 课程清单之二
  6. 一键脚本解决Windows系统更新错误(0x80070003)
  7. 【微信小程序】 小程序中的递归运算/二分查找算法/Maximum call stack size exceeded
  8. Visual Studio 调试系列6 监视变量(使用监视窗口和快速监视窗口)
  9. [Powershell]导出指定的定时计划任务
  10. rust下根据protobuf的消息名创建对象实例