<?php 
 
/** 
 * This file is part of the PHP Generics package. 
 * 
 * @package Generics 
 */ 
namespace Generics\Util; 
 
use Generics\DeprecatedException; 
use Generics\NoticeException; 
use Generics\RecoverableErrorException; 
use Generics\UserDeprecatedException; 
use Generics\UserErrorException; 
use Generics\UserNoticeException; 
use Generics\UserWarningException; 
use Generics\WarningException; 
use ErrorException; 
 
/** 
 * This class provides a custom error handler for exception handling rather than internal error handling 
 * 
 * @author Maik Greubel <[email protected]> 
 * 
 */ 
class ExceptionErrorHandler 
{ 
 
    public function __construct() 
    { 
        $this->setErrorHandler(); 
    } 
 
    private function setErrorHandler() 
    { 
        set_error_handler(array( 
            $this, 
            'errorHandler' 
        ), E_ALL | E_STRICT); 
    } 
 
    public function errorHandler(int $err_severity, string $err_msg, string $err_file, int $err_line) 
    { 
        if (0 === error_reporting()) { 
            return false; 
        } 
         
        switch ($err_severity) { 
            case E_WARNING: 
                throw new WarningException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_NOTICE: 
                throw new NoticeException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_USER_ERROR: 
                throw new UserErrorException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_USER_WARNING: 
                throw new UserWarningException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_USER_NOTICE: 
                throw new UserNoticeException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_RECOVERABLE_ERROR: 
                throw new RecoverableErrorException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_DEPRECATED: 
                throw new DeprecatedException($err_msg, 0, $err_severity, $err_file, $err_line); 
            case E_USER_DEPRECATED: 
                throw new UserDeprecatedException($err_msg, 0, $err_severity, $err_file, $err_line); 
            default: 
                throw new ErrorException($err_msg, 0, $err_severity, $err_file, $err_line); 
        } 
    } 
} 
 
 |