public static function fire($name, $data = [], $stop = false)
    {
        if (static::bound($name))
        {
            static::$fired[$name] = true;

            foreach (static::$events[$name] as $key => $value)
            {
                list($type, $callback) = each($value);

                // Call back is a class
                if (is_string($callback)) {
                    $callback = [$instance = new $callback(), 'handle'];
                }

                $responses[] = $response =
                    call_user_func_array($callback, (array) $data);

                if ($type == 'once') {
                    unset(static::$events[$name][$key]);
                }

                if ($stop && !empty($response)) {
                    return $responses;
                }
            }
        }

        return isset($responses) ? $responses : null;
    }