Annotation of embedaddon/php/ext/spl/tests/observer_002.phpt, revision 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>