public function handleError(int $errorLevel, string $errorMessage, string $errorFile, int $errorLine)
    {
        if (error_reporting() === 0) {
            return;
        }

        $errorLevels = [
            E_WARNING            => 'Warning',
            E_NOTICE             => 'Notice',
            E_USER_ERROR         => 'User Error',
            E_USER_WARNING       => 'User Warning',
            E_USER_NOTICE        => 'User Notice',
            E_STRICT             => 'Runtime Notice',
            E_RECOVERABLE_ERROR  => 'Catchable Fatal Error'
        ];

        if (in_array($errorLevel, (array)$this->exceptionalErrors)) {
            if (class_exists(FlowError\Exception::class)) {
                throw new FlowError\Exception($errorLevels[$errorLevel] . ': ' . $errorMessage . ' in ' . $errorFile . ' line ' . $errorLine, 1);
            } else {
                throw new \Exception($errorLevels[$errorLevel] . ': ' . $errorMessage . ' in ' . $errorFile . ' line ' . $errorLine, 1);
            }
        }
    }