1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<code><?php</code>
<code>/**</code>
<code>*</code>
<code>* 被觀察者</code>
<code>*/</code>
<code>class</code> <code>Subject </code><code>implements</code> <code>SplSubject {</code>
<code>protected</code> <code>$_value</code><code>;</code>
<code>protected</code> <code>$_observers</code><code>;</code>
<code>* 構造函數</code>
<code>* @return void</code>
<code>public</code> <code>function</code> <code>__construct() {</code>
<code>$this</code><code>->_observers = </code><code>new</code> <code>SplObjectStorage();</code>
<code>}</code>
<code>* 追加觀察者</code>
<code>* @see SplSubject::attach()</code>
<code>public</code> <code>function</code> <code>attach(SplObserver </code><code>$observer</code><code>) {</code>
<code>$this</code><code>->_observers->attach(</code><code>$observer</code><code>);</code>
<code>* 抛棄觀察者</code>
<code>* @see SplSubject::detach()</code>
<code>public</code> <code>function</code> <code>detach(SplObserver </code><code>$observer</code><code>) {</code>
<code>$this</code><code>->_observers->detach(</code><code>$observer</code><code>);</code>
<code>* 通知觀察者</code>
<code>* @see SplSubject::notify()</code>
<code>public</code> <code>function</code> <code>notify() {</code>
<code>foreach</code> <code>(</code><code>$this</code><code>->_observers </code><code>as</code> <code>$observer</code><code>) {</code>
<code>$observer</code><code>->update(</code><code>$this</code><code>);</code>
<code>* 設定最新值</code>
<code>* @param mixed $value</code>
<code>* @return</code>
<code>public</code> <code>function</code> <code>setValue(</code><code>$value</code><code>) {</code>
<code>$this</code><code>->_value = </code><code>$value</code><code>;</code>
<code>$this</code><code>->notify();</code>
<code>* 擷取最後更新的值</code>
<code>* @return mixed</code>
<code>public</code> <code>function</code> <code>getValue() {</code>
<code>return</code> <code>$this</code><code>->_value;</code>
<code>* 觀察者</code>
<code>class</code> <code>Observer </code><code>implements</code> <code>SplObserver {</code>
<code>/\**</code>
<code>* @see SplObserver::update()</code>
<code>public</code> <code>function</code> <code>update(SplSubject </code><code>$subject</code><code>) {</code>
<code>echo</code> <code>'i know you '</code><code>.</code><code>$subject</code><code>->getValue();</code>
<code>header(</code><code>'Content-type:text/html;charset=utf-8'</code><code>);</code>
<code>date_default_timezone_set(</code><code>'Asia/Shanghai'</code><code>);</code>
<code>error_reporting</code><code>(E_ALL);</code>
<code>$subject</code> <code>= </code><code>new</code> <code>Subject();</code>
<code>$observer</code> <code>= </code><code>new</code> <code>Observer();</code>
<code>$subject</code><code>->attach(</code><code>$observer</code><code>);</code>
<code>$subject</code><code>->setValue(</code><code>'updated'</code><code>);</code>
本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1286698,如需轉載請自行聯系原作者