PHP의 restore_exception_handler() 함수는 이전에 정의된 예외 핸들러(exception handler)를 복원하는 역할을 합니다. set_exception_handler()를 사용해 예외 핸들러를 변경한 뒤, 다시 이전 핸들러(PHP 내장 핸들러 또는 사용자가 직접 정의한 함수)로 되돌리고 싶을 때 이 함수를 사용합니다.
문법(Syntax)
restore_exception_handler()
매개변수
이 함수는 별도의 매개변수를 받지 않습니다.
반환값
restore_exception_handler() 함수는 항상 TRUE(참)를 반환합니다.
동작 방식
PHP는 예외 핸들러를 스택(stack) 구조로 관리합니다. set_exception_handler()가 호출될 때마다 새로운 핸들러가 스택에 쌓이며, restore_exception_handler()가 호출되면 가장 나중에 등록된 핸들러가 제거되고 바로 그 이전에 등록된 핸들러가 활성화됩니다. 따라서 두 단계 이상 이전으로 되돌아가려면 이 함수를 여러 번 호출해야 합니다.
예제
다음 예제에서는 세 개의 사용자 정의 예외 핸들러를 차례로 등록한 후, restore_exception_handler()를 두 번 호출하여 처음 등록한 핸들러로 되돌립니다.
<?php
function customException1($exception) {
echo "[" . __FUNCTION__ . "] " . $exception->getMessage();
}
function customException2($exception) {
echo "[" . __FUNCTION__ . "] " . $exception->getMessage();
}
function customException3($exception) {
echo "[" . __FUNCTION__ . "] " . $exception->getMessage();
}
set_exception_handler("customException1");
set_exception_handler("customException2");
set_exception_handler("customException3");
// 핸들러 복원 (두 번 호출하면 처음 등록한 핸들러로 되돌아감)
restore_exception_handler();
restore_exception_handler();
// 예외 발생
throw new Exception("첫 번째 예외 핸들러가 실행됩니다!");
?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
[customException1] 첫 번째 예외 핸들러가 실행됩니다!
정리
set_exception_handler()는 호출할 때마다 새로운 예외 핸들러를 스택에 쌓습니다.restore_exception_handler()는 스택에서 가장 최근의 핸들러를 제거하고 이전 핸들러를 활성화합니다.- 예외 핸들러는 함수 이름 문자열뿐만 아니라 익명 함수(Closure)나 객체의 메서드로도 지정할 수 있습니다.