set_exception_handler() 함수란?
PHP의 set_exception_handler() 함수는 예외가 발생했을 때 이를 처리할 사용자 정의 함수를 지정하는 역할을 합니다. 코드에서 try/catch 블록으로 예외를 잡지 못한 경우, 이 함수로 등록된 핸들러가 기본 예외 처리기(default exception handler)로 동작합니다.
주의할 점은, 예외 핸들러가 한 번 호출되면 그 이후의 스크립트 실행은 중단된다는 것입니다. 따라서 핸들러 내부에서 로그 기록, 오류 페이지 출력 등 필요한 마무리 작업을 모두 처리해야 합니다.
문법(Syntax)
set_exception_handler(exception_handler)
매개변수(Parameters)
exception_handler − 처리되지 않은 예외(uncaught exception)가 발생했을 때 호출될 함수의 이름입니다. 이 함수는 반드시
set_exception_handler()를 호출하기 이전에 정의되어 있어야 합니다. 또한 핸들러 함수는 매개변수를 하나 받아야 하며, 이 매개변수로 발생(throw)된 예외 객체(Exception object)가 전달됩니다.
반환값(Return)
set_exception_handler() 함수는 이전에 정의되어 있던 예외 핸들러의 이름을 반환합니다. 오류가 발생한 경우에는 NULL을 반환하며, 이전에 정의된 핸들러가 없는 경우에도 NULL이 반환됩니다.
예제(Example)
다음은 set_exception_handler() 함수의 실제 사용 예입니다.
<?php
function exception_handler($exception) {
echo "Uncaught exception = " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Not Found Exception');
echo "not included Executed\n";
?>
실행 결과(Output)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Uncaught exception = Not Found Exception
핵심 포인트 정리
예외 핸들러는
try/catch로 처리되지 않은 예외만 담당합니다.핸들러가 실행된 후에는 스크립트가 종료되므로, 그 뒤의 코드는 실행되지 않습니다. 위 예제에서 마지막
echo문이 출력되지 않는 이유입니다.PHP 7부터는 대부분의 치명적 오류(fatal error)도
Error클래스의 예외로 변환되므로, 이 함수를 활용하면 보다 일관된 오류 처리 체계를 구축할 수 있습니다.