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

PHP restore_exception_handler() 함수 – 이전 예외 핸들러 복원하기

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)나 객체의 메서드로도 지정할 수 있습니다.