namespace Illuminate\Events;use Exception;use ReflectionClass;use Illuminate\Support\Str;use Illuminate\Container\Container;use Illuminate\Contracts\Broadcasting\ShouldBroadcast;use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;use Illuminate\Contracts\Container\Container as ContainerContract;// use namespaceclass Dispatcher implements DispatcherContract{// a Dispatcher implements Dispatcher Contract    /**     * The IoC container instance.     *     * @var \Illuminate\Contracts\Container\Container     */    protected $container;// The Ioc container instance.    /**     * The registered event listeners.     *     * @var array     */    protected $listeners = [];// listeners be registered    /**     * The wildcard listeners.     *     * @var array     */    protected $wildcards = [];// The wildcard listeners. like store    /**     * The sorted event listeners.     *     * @var array     */    protected $sorted = [];// The sorted event listeners.    /**     * The event firing stack.     *     * @var array     */    protected $firing = [];//The event firing stack.    /**     * The queue resolver instance.     *     * @var callable     */    protected $queueResolver;// The queue resolver instance.   // at last ,we find to instance ,some listeners    /**     * Create a new event dispatcher instance.     *     * @param  \Illuminate\Contracts\Container\Container|null  $container     * @return void     */   // dispathcer is use to make it like you want    public function __construct(ContainerContract $container = null)    {        $this->container = $container ?: new Container;    }// ContainerContract is $contanier