개요
PHP의 Exception 클래스는 Throwable 인터페이스를 구현하며, ErrorException 클래스는 Exception 클래스를 상속하여 확장한 클래스입니다. ErrorException은 일반적으로 무시되기 쉬운 Notice나 Warning 같은 오류를 직접 잡아내고 처리하고 싶을 때 명시적으로 던지기(throw) 위해 사용됩니다.
PHP 코어에는 다음과 같은 사전 정의된 오류 상수들이 포함되어 있습니다.
| 값 | 상수 | 설명 |
|---|---|---|
| 1 | E_ERROR | 치명적인 런타임 오류입니다. |
| 2 | E_WARNING | 런타임 경고(치명적이지 않은 오류)입니다. |
| 4 | E_PARSE | 컴파일 시점의 파싱(parse) 오류입니다. |
| 8 | E_NOTICE | 런타임 알림(notice)입니다. |
| 16 | E_CORE_ERROR | PHP 초기 구동 시 발생하는 치명적인 오류입니다. |
| 32 | E_CORE_WARNING | PHP 초기 구동 시 발생하는 경고(치명적이지 않은 오류)입니다. |
| 64 | E_COMPILE_ERROR | 치명적인 컴파일 시점 오류입니다. |
| 128 | E_COMPILE_WARNING | 컴파일 시점 경고(치명적이지 않은 오류)입니다. |
| 256 | E_USER_ERROR | 사용자가 생성한 오류 메시지입니다. |
| 512 | E_USER_WARNING | 사용자가 생성한 경고 메시지입니다. |
| 1024 | E_USER_NOTICE | 사용자가 생성한 알림 메시지입니다. |
| 2048 | E_STRICT | 활성화하면 코드의 상호 운용성과 향후 호환성을 보장할 수 있도록 PHP가 코드 수정 방향을 제안합니다. |
| 4096 | E_RECOVERABLE_ERROR | 잡아낼(catch) 수 있는 치명적인 오류입니다. |
| 8192 | E_DEPRECATED | 런타임 알림으로, 폐기 예정 기능 사용 시 발생합니다. |
| 16384 | E_USER_DEPRECATED | 사용자가 생성한 폐기 예정(deprecated) 경고 메시지입니다. |
| 32767 | E_ALL | E_STRICT를 포함한 모든 오류와 경고입니다. |
ErrorException의 추가 속성과 메서드
ErrorException 클래스는 Exception 클래스로부터 상속받은 속성과 메서드 외에, 아래와 같이 하나의 속성과 하나의 메서드를 추가로 제공합니다.
protected int severity ; final public getSeverity ( void ) : int
여기서 severity는 예외의 심각도를 나타내며, 위 표에 나열된 오류 유형에 해당하는 정수 값으로 표현됩니다.
ErrorException 활용 예제
다음 스크립트에서는 사용자가 직접 정의한 함수 errhandler를 set_error_handler() 함수로 등록하여 오류 핸들러로 설정합니다. 이 핸들러는 파일을 읽으려다 파일이 존재하지 않는 치명적인 오류가 발생했을 때 ErrorException을 던집니다.
예제 코드
<?php
function errhandler($severity, $message, $file, $line) {
if (!(error_reporting() & $severity)) {
echo "no error";
return;
}
throw new ErrorException("Fatal Error:No such file or directory", 0, E_ERROR);
}
set_error_handler("errhandler");
/* 예외 발생시키기 */
try{
$data=file_get_contents("nofile.php");
echo $data;
}
catch (ErrorException $e){
echo $e->getMessage();
}
?>위 예제를 실행하면 다음과 같은 결과가 출력됩니다.
실행 결과
Fatal Error:No such file or directory