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

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

Triggers an event in the attached observers
public trigger ( string $event, array $args = [] ) : array
$event string The event to attach
$args array Arguments to the event handler
Результат array
    public function trigger($event, array $args = array())
    {
        $event = strtolower($event);
        $result = array();
        // Make sure the event is known to us, otherwise return an empty array
        if (!isset($this->events[$event]) || empty($this->events[$event])) {
            return $result;
        }
        foreach ($this->events[$event] as $className) {
            // Make sure the observer exists.
            if (!isset($this->observers[$className])) {
                continue;
            }
            // Get the observer
            $observer = $this->observers[$className];
            // Make sure the method exists
            if (!method_exists($observer, $event)) {
                continue;
            }
            // Call the event handler and add its output to the return value. The switch allows for execution up to 2x
            // faster than using call_user_func_array
            switch (count($args)) {
                case 0:
                    $result[] = $observer->{$event}();
                    break;
                case 1:
                    $result[] = $observer->{$event}($args[0]);
                    break;
                case 2:
                    $result[] = $observer->{$event}($args[0], $args[1]);
                    break;
                case 3:
                    $result[] = $observer->{$event}($args[0], $args[1], $args[2]);
                    break;
                case 4:
                    $result[] = $observer->{$event}($args[0], $args[1], $args[2], $args[3]);
                    break;
                case 5:
                    $result[] = $observer->{$event}($args[0], $args[1], $args[2], $args[3], $args[4]);
                    break;
                default:
                    $result[] = call_user_func_array(array($observer, $event), $args);
                    break;
            }
        }
        // Return the observers' result in an array
        return $result;
    }

Usage Example

Пример #1
0
 /**
  * @covers FOF30\Event\Dispatcher::trigger
  */
 public function testTrigger()
 {
     ReflectionHelper::setValue($this->object, 'observers', array());
     ReflectionHelper::setValue($this->object, 'events', array());
     $observer1 = new FirstObserver($this->object);
     $observer2 = new SecondObserver($this->object);
     // Trigger a non-existent event
     $result = $this->object->trigger('notthere');
     $this->assertEquals(array(), $result);
     // Trigger a non-existent event with data
     $result = $this->object->trigger('notthere', array('whatever', 'nevermind'));
     $this->assertEquals(array(), $result);
     // Trigger an event with one observer responding to it
     $result = $this->object->trigger('onlySecond');
     $this->assertEquals(array('only second'), $result);
     // Trigger an event with two observers responding to it
     $result = $this->object->trigger('identifyYourself');
     $this->assertEquals(array('one', 'two'), $result);
     // Trigger an event with two observers responding to it, with parameters
     $result = $this->object->trigger('returnConditional', array('one'));
     $this->assertEquals(array(true, false), $result);
     // Trigger an event with two observers responding to it, with parameters
     $result = $this->object->trigger('returnConditional', array('two'));
     $this->assertEquals(array(false, true), $result);
 }