Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 오류 예외(ErrorException) 완벽 정리: 에러 상수부터 실전 예제까지

개요

PHP의 Exception 클래스는 Throwable 인터페이스를 구현하며, ErrorException 클래스는 Exception 클래스를 상속하여 확장한 클래스입니다. ErrorException은 일반적으로 무시되기 쉬운 Notice나 Warning 같은 오류를 직접 잡아내고 처리하고 싶을 때 명시적으로 던지기(throw) 위해 사용됩니다.

PHP 코어에는 다음과 같은 사전 정의된 오류 상수들이 포함되어 있습니다.

상수설명
1E_ERROR치명적인 런타임 오류입니다.
2E_WARNING런타임 경고(치명적이지 않은 오류)입니다.
4E_PARSE컴파일 시점의 파싱(parse) 오류입니다.
8E_NOTICE런타임 알림(notice)입니다.
16E_CORE_ERRORPHP 초기 구동 시 발생하는 치명적인 오류입니다.
32E_CORE_WARNINGPHP 초기 구동 시 발생하는 경고(치명적이지 않은 오류)입니다.
64E_COMPILE_ERROR치명적인 컴파일 시점 오류입니다.
128E_COMPILE_WARNING컴파일 시점 경고(치명적이지 않은 오류)입니다.
256E_USER_ERROR사용자가 생성한 오류 메시지입니다.
512E_USER_WARNING사용자가 생성한 경고 메시지입니다.
1024E_USER_NOTICE사용자가 생성한 알림 메시지입니다.
2048E_STRICT활성화하면 코드의 상호 운용성과 향후 호환성을 보장할 수 있도록 PHP가 코드 수정 방향을 제안합니다.
4096E_RECOVERABLE_ERROR잡아낼(catch) 수 있는 치명적인 오류입니다.
8192E_DEPRECATED런타임 알림으로, 폐기 예정 기능 사용 시 발생합니다.
16384E_USER_DEPRECATED사용자가 생성한 폐기 예정(deprecated) 경고 메시지입니다.
32767E_ALLE_STRICT를 포함한 모든 오류와 경고입니다.

ErrorException의 추가 속성과 메서드

ErrorException 클래스는 Exception 클래스로부터 상속받은 속성과 메서드 외에, 아래와 같이 하나의 속성과 하나의 메서드를 추가로 제공합니다.

protected int severity ;
final public getSeverity ( void ) : int

여기서 severity는 예외의 심각도를 나타내며, 위 표에 나열된 오류 유형에 해당하는 정수 값으로 표현됩니다.

ErrorException 활용 예제

다음 스크립트에서는 사용자가 직접 정의한 함수 errhandlerset_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