FOF30\Event\Dispatcher::detach PHP Метод

detach() публичный Метод

Detaches an observer from the object
public detach ( Observer $observer ) : Dispatcher
$observer Observer The observer to detach
Результат Dispatcher Ourselves, for chaining
    public function detach(Observer $observer)
    {
        $className = get_class($observer);
        // Make sure this observer is already registered
        if (!isset($this->observers[$className])) {
            return $this;
        }
        // Unregister the observable events
        $events = $observer->getObservableEvents();
        foreach ($events as $event) {
            $event = strtolower($event);
            if (isset($this->events[$event])) {
                $key = array_search($className, $this->events[$event]);
                if ($key !== false) {
                    unset($this->events[$event][$key]);
                    if (empty($this->events[$event])) {
                        unset($this->events[$event]);
                    }
                }
            }
        }
        // Detach observer
        unset($this->observers[$className]);
        return $this;
    }

Usage Example

Пример #1
0
 /**
  * @covers FOF30\Event\Dispatcher::detach
  */
 public function testDetach()
 {
     ReflectionHelper::setValue($this->object, 'observers', array());
     ReflectionHelper::setValue($this->object, 'events', array());
     $observer1 = new FirstObserver($this->object);
     $observer2 = new SecondObserver($this->object);
     $observers = ReflectionHelper::getValue($this->object, 'observers');
     $this->assertCount(2, $observers);
     // Detaching an observer
     $this->object->detach($observer1);
     $observers = ReflectionHelper::getValue($this->object, 'observers');
     $this->assertCount(1, $observers);
     // Detaching the same observer
     $this->object->detach($observer1);
     $observers = ReflectionHelper::getValue($this->object, 'observers');
     $this->assertCount(1, $observers);
     // Detaching another observer
     $this->object->detach($observer2);
     $observers = ReflectionHelper::getValue($this->object, 'observers');
     $this->assertCount(0, $observers);
 }