1. <?php
    2. //观察者模式
    3. //适用场景:订阅者通知
    4. //自己对观察者模式对理解:
    5. // 需求:有事情变化你要通知我
    6. // 实现:
    7. // 1、要通知对人必须在我这里注册,否则我不知道要通知谁。
    8. // 2、想要获取通知的人必须遵守我的规则,实现我指定的通知事件,不然我没办法统一通知
    9. // 3、事件发生的时候我会逐一通知你们。
    10. //定义一个事件产生抽象类
    11. abstract class genEvent
    12. {
    13. private $ob_servers = [];
    14. //增加观察者
    15. public function addObs($ob_server)
    16. {
    17. $this->ob_servers[] = $ob_server;
    18. }
    19. //通知
    20. public function notify()
    21. {
    22. if(!empty($this->ob_servers))
    23. {
    24. foreach($this->ob_servers as $ob_server)
    25. {
    26. $ob_server->update(); // 逐个调用
    27. }
    28. }
    29. }
    30. }
    31. //定义观察者接口
    32. interface obServer{
    33. public function update($event_info = null);
    34. }
    35. class obServer1 implements obServer{
    36. public function update($event_info = null){
    37. echo "观察者1 收到执行通知\n";
    38. }
    39. }
    40. class obServer2 implements obServer{
    41. public function update($event_info = null){
    42. echo "观察者2 收到执行通知\n";
    43. }
    44. }
    45. class event extends genEvent{
    46. //事件触发
    47. public function trigger()
    48. {
    49. $this->notify();
    50. }
    51. }
    52. //实现
    53. $event = new event();
    54. $event->addObs(new obServer1());
    55. $event->addObs(new obServer2());
    56. $event->trigger();