Annotation of embedaddon/php/ext/spl/tests/observer_002.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: SPL: SplObjectStorage
3: --FILE--
4: <?php
5:
6: class MyObjectStorage extends SplObjectStorage
7: {
8: function rewind()
9: {
10: echo __METHOD__ . "()\n";
11: parent::rewind();
12: }
13:
14: function valid()
15: {
16: echo __METHOD__ . "(" . (parent::valid() ? 1 : 0) . ")\n";
17: return parent::valid();
18: }
19:
20: function key()
21: {
22: echo __METHOD__ . "(" . parent::key() . ")\n";
23: return parent::key();
24: }
25:
26: function current()
27: {
28: echo __METHOD__ . "(" . parent::current()->getName() . ")\n";
29: return parent::current();
30: }
31:
32: function next()
33: {
34: echo __METHOD__ . "()\n";
35: parent::next();
36: }
37: }
38:
39: class ObserverImpl implements SplObserver
40: {
41: protected $name = '';
42:
43: function __construct($name = 'obj')
44: {
45: $this->name = '$' . $name;
46: }
47:
48: function update(SplSubject $subject)
49: {
50: echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
51: }
52:
53: function getName()
54: {
55: return $this->name;
56: }
57: }
58:
59: class SubjectImpl implements SplSubject
60: {
61: protected $name = '';
62: protected $observers;
63:
64: function __construct($name = 'sub')
65: {
66: $this->observers = new MyObjectStorage;
67: $this->name = '$' . $name;
68: }
69:
70: function attach(SplObserver $observer)
71: {
72: echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
73: $this->observers->attach($observer);
74: }
75:
76: function detach(SplObserver $observer)
77: {
78: echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
79: $this->observers->detach($observer);
80: }
81:
82: function count()
83: {
84: return $this->observers->count();
85: }
86:
87: function notify()
88: {
89: echo $this->name . '->' . __METHOD__ . "();\n";
90: foreach($this->observers as $key => $observer)
91: {
92: $observer->update($this);
93: }
94: }
95:
96: function getName()
97: {
98: return $this->name;
99: }
100:
101: function contains($obj)
102: {
103: return $this->observers->contains($obj);
104: }
105: }
106:
107: $sub = new SubjectImpl;
108:
109: $ob1 = new ObserverImpl("ob1");
110: $ob2 = new ObserverImpl("ob2");
111: $ob3 = new ObserverImpl("ob3");
112:
113: var_dump($sub->contains($ob1));
114: $sub->attach($ob1);
115: var_dump($sub->contains($ob1));
116: $sub->attach($ob1);
117: $sub->attach($ob2);
118: $sub->attach($ob3);
119: var_dump($sub->count());
120:
121: $sub->notify();
122:
123: $sub->detach($ob3);
124: var_dump($sub->count());
125:
126: $sub->notify();
127:
128: $sub->detach($ob2);
129: $sub->detach($ob1);
130: var_dump($sub->count());
131:
132: $sub->notify();
133:
134: $sub->attach($ob3);
135: var_dump($sub->count());
136:
137: $sub->notify();
138:
139: ?>
140: ===DONE===
141: <?php exit(0); ?>
142: --EXPECT--
143: bool(false)
144: $sub->SubjectImpl::attach($ob1);
145: bool(true)
146: $sub->SubjectImpl::attach($ob1);
147: $sub->SubjectImpl::attach($ob2);
148: $sub->SubjectImpl::attach($ob3);
149: int(3)
150: $sub->SubjectImpl::notify();
151: MyObjectStorage::rewind()
152: MyObjectStorage::valid(1)
153: MyObjectStorage::current($ob1)
154: MyObjectStorage::key(0)
155: $ob1->ObserverImpl::update($sub);
156: MyObjectStorage::next()
157: MyObjectStorage::valid(1)
158: MyObjectStorage::current($ob2)
159: MyObjectStorage::key(1)
160: $ob2->ObserverImpl::update($sub);
161: MyObjectStorage::next()
162: MyObjectStorage::valid(1)
163: MyObjectStorage::current($ob3)
164: MyObjectStorage::key(2)
165: $ob3->ObserverImpl::update($sub);
166: MyObjectStorage::next()
167: MyObjectStorage::valid(0)
168: $sub->SubjectImpl::detach($ob3);
169: int(2)
170: $sub->SubjectImpl::notify();
171: MyObjectStorage::rewind()
172: MyObjectStorage::valid(1)
173: MyObjectStorage::current($ob1)
174: MyObjectStorage::key(0)
175: $ob1->ObserverImpl::update($sub);
176: MyObjectStorage::next()
177: MyObjectStorage::valid(1)
178: MyObjectStorage::current($ob2)
179: MyObjectStorage::key(1)
180: $ob2->ObserverImpl::update($sub);
181: MyObjectStorage::next()
182: MyObjectStorage::valid(0)
183: $sub->SubjectImpl::detach($ob2);
184: $sub->SubjectImpl::detach($ob1);
185: int(0)
186: $sub->SubjectImpl::notify();
187: MyObjectStorage::rewind()
188: MyObjectStorage::valid(0)
189: $sub->SubjectImpl::attach($ob3);
190: int(1)
191: $sub->SubjectImpl::notify();
192: MyObjectStorage::rewind()
193: MyObjectStorage::valid(1)
194: MyObjectStorage::current($ob3)
195: MyObjectStorage::key(0)
196: $ob3->ObserverImpl::update($sub);
197: MyObjectStorage::next()
198: MyObjectStorage::valid(0)
199: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>