Guest User

Untitled

a guest
Oct 21st, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. <?php
  2. namespace Common\Observer;
  3.  
  4. use SplObjectStorage;
  5.  
  6. /**
  7. * The subject implement in the observer pattern.
  8. *
  9. * @author TonySeek
  10. *
  11. */
  12. trait Subject
  13. {
  14. private $observers = null;
  15.  
  16. /**
  17. * Create or get existed observer object container.
  18. *
  19. * @return \SplObjectStorage;
  20. */
  21. private function getObserverStorage()
  22. {
  23. if (!$this->observers) {
  24. $this->observers = new SplObjectStorage();
  25. }
  26. return $this->observers;
  27. }
  28.  
  29. /**
  30. * @return \Common\Observer\Subject
  31. */
  32. public function attachObserver(Observer $observer)
  33. {
  34. $storage = $this->getObserverStorage();
  35. $storage->attach($observer);
  36. return $this;
  37. }
  38.  
  39. /**
  40. * @return \Common\Observer\Subject
  41. */
  42. public function detachObserver(Observer $observer)
  43. {
  44. $storage = $this->getObserverStorage();
  45. $storage->detach($observer);
  46. return $this;
  47. }
  48.  
  49. /**
  50. * @see SplSubject::notify()
  51. */
  52. public function notify()
  53. {
  54. $storage = $this->getObserverStorage();
  55. foreach($storage as $observer) {
  56. $observer->update($this);
  57. }
  58. }
  59. }
Add Comment
Please, Sign In to add comment