Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Common\Observer;
- use SplObjectStorage;
- /**
- * The subject implement in the observer pattern.
- *
- * @author TonySeek
- *
- */
- trait Subject
- {
- private $observers = null;
- /**
- * Create or get existed observer object container.
- *
- * @return \SplObjectStorage;
- */
- private function getObserverStorage()
- {
- if (!$this->observers) {
- $this->observers = new SplObjectStorage();
- }
- return $this->observers;
- }
- /**
- * @return \Common\Observer\Subject
- */
- public function attachObserver(Observer $observer)
- {
- $storage = $this->getObserverStorage();
- $storage->attach($observer);
- return $this;
- }
- /**
- * @return \Common\Observer\Subject
- */
- public function detachObserver(Observer $observer)
- {
- $storage = $this->getObserverStorage();
- $storage->detach($observer);
- return $this;
- }
- /**
- * @see SplSubject::notify()
- */
- public function notify()
- {
- $storage = $this->getObserverStorage();
- foreach($storage as $observer) {
- $observer->update($this);
- }
- }
- }
Add Comment
Please, Sign In to add comment