MIOLO20
Carregando...
Procurando...
Nenhuma entrada encontrada
EventManager.php
Ir para a documentação deste ficheiro.
1<?php
2/*
3 * $Id$
4 *
5 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16 *
17 * This software consists of voluntary contributions made by many individuals
18 * and is licensed under the LGPL. For more information, see
19 * <http://www.doctrine-project.org>.
20 */
21
22namespace Doctrine\Common;
23
24use Doctrine\Common\Events\Event;
25
40{
47 private $_listeners = array();
48
58 public function dispatchEvent($eventName, EventArgs $eventArgs = null)
59 {
60 if (isset($this->_listeners[$eventName])) {
61 $eventArgs = $eventArgs === null ? EventArgs::getEmptyInstance() : $eventArgs;
62
63 foreach ($this->_listeners[$eventName] as $listener) {
64 $listener->$eventName($eventArgs);
65 }
66 }
67 }
68
75 public function getListeners($event = null)
76 {
77 return $event ? $this->_listeners[$event] : $this->_listeners;
78 }
79
86 public function hasListeners($event)
87 {
88 return isset($this->_listeners[$event]) && $this->_listeners[$event];
89 }
90
97 public function addEventListener($events, $listener)
98 {
99 // Picks the hash code related to that listener
100 $hash = spl_object_hash($listener);
101
102 foreach ((array) $events as $event) {
103 // Overrides listener if a previous one was associated already
104 // Prevents duplicate listeners on same event (same instance only)
105 $this->_listeners[$event][$hash] = $listener;
106 }
107 }
108
115 public function removeEventListener($events, $listener)
116 {
117 // Picks the hash code related to that listener
118 $hash = spl_object_hash($listener);
119
120 foreach ((array) $events as $event) {
121 // Check if actually have this listener associated
122 if (isset($this->_listeners[$event][$hash])) {
123 unset($this->_listeners[$event][$hash]);
124 }
125 }
126 }
127
134 public function addEventSubscriber(EventSubscriber $subscriber)
135 {
136 $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber);
137 }
138}
dispatchEvent($eventName, EventArgs $eventArgs=null)
addEventSubscriber(EventSubscriber $subscriber)
removeEventListener($events, $listener)
addEventListener($events, $listener)