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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
<?php
namespace hji\membership\observers;
use hji\membership\entities\Event;
use SplObserver;
class EventDispatcher implements \SplSubject
{
private $observers;
private $event;
public function attach(\SplObserver $observer)
{
if (!$this->hasObserver($observer))
{
$this->observers[] = $observer;
}
}
public function hasObserver(\SplObserver $observer)
{
if (array_search($observer, (array)$this->observers) === false)
{
return false;
}
else
{
return true;
}
}
public function detach(\SplObserver $observer)
{
$key = array_search($observer,$this->observers, true);
if (false !== $key)
{
unset($this->observers[$key]);
}
}
public function notify()
{
foreach ($this->observers as $value)
{
$value->update($this);
}
}
private function _setEvent($event)
{
$this->event = $event;
}
public function getEvent()
{
return $this->event;
}
public function dispatchEvent(Event $event)
{
$this->_setEvent($event);
$this->notify();
}
}