1 /**
2 * 事件产生类
3 * Class EventGenerator
4 */
5 abstract class EventGenerator
6 {
7 private $ObServers = [];
8
9 //增加观察者
10 public function add(ObServer $ObServer)
11 {
12 $this->ObServers[] = $ObServer;
13 }
14
15 //事件通知
16 public function notify()
17 {
18 foreach ($this->ObServers as $ObServer) {
19 $ObServer->update();
20 }
21 }
22
23 }
24
25 /**
26 * 观察者接口类
27 * Interface ObServer
28 */
29 interface ObServer
30 {
31 public function update($event_info = null);
32 }
33
34 /**
35 * 观察者1
36 */
37 class ObServer1 implements ObServer
38 {
39 public function update($event_info = null)
40 {
41 echo "观察者1 收到执行通知 执行完毕!\n";
42 }
43 }
44
45 /**
46 * 观察者2
47 */
48 class ObServer2 implements ObServer
49 {
50 public function update($event_info = null)
51 {
52 echo "观察者2 收到执行通知 执行完毕!\n";
53 }
54 }
55
56 /**
57 * 事件
58 * Class Event
59 */
60 class Event extends EventGenerator
61 {
62 /**
63 * 触发事件
64 */
65 public function trigger()
66 {
67 //通知观察者
68 $this->notify();
69 }
70 }
71
72 //创建一个事件
73 $event = new Event();
74 //为事件增加旁观者
75 $event->add(new ObServer1());
76 $event->add(new ObServer2());
77 //执行事件 通知旁观者
78 $event->trigger();