54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Basic implementation of the message exchange mechanism known as pub/sub messaging pattern.
 | 
						|
 * Terminology deviations:
 | 
						|
 *   event            - message
 | 
						|
 *   event manager    - message publisher
 | 
						|
 *   fire event       - publish message
 | 
						|
 *   event subscriber - message subscriber
 | 
						|
 */
 | 
						|
namespace Magento\TestFramework;
 | 
						|
 | 
						|
class EventManager
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Registered event subscribers
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $_subscribers = [];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructor
 | 
						|
     *
 | 
						|
     * @param array $subscribers Subscriber instances
 | 
						|
     */
 | 
						|
    public function __construct(array $subscribers)
 | 
						|
    {
 | 
						|
        $this->_subscribers = $subscribers;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Notify registered subscribers, which are interested in event
 | 
						|
     *
 | 
						|
     * @param string $eventName
 | 
						|
     * @param array $parameters Parameters to be passed to each subscriber
 | 
						|
     * @param bool $reverseOrder Whether subscribers should be notified in reverse order
 | 
						|
     */
 | 
						|
    public function fireEvent($eventName, array $parameters = [], $reverseOrder = false)
 | 
						|
    {
 | 
						|
        $subscribers = $reverseOrder ? array_reverse($this->_subscribers) : $this->_subscribers;
 | 
						|
        foreach ($subscribers as $subscriberInstance) {
 | 
						|
            $callback = [$subscriberInstance, $eventName];
 | 
						|
            if (is_callable($callback)) {
 | 
						|
                call_user_func_array($callback, $parameters);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |