코드는 다음과 같습니다. 등록된 오류 처리 함수인register_shutdown_function이 실행되지 않는데 매우 이상합니다.
<프리><코드> error_reporting(-1); ini_set('display_errors', 1); set_error_handler(함수(){ echo "오류 처리기 실행"; }, E_ALL); set_Exception_handler(함수(){ echo "예외 처리기 실행"; }); Register_shutdown_function(함수(){ echo "종료 기능 실행"; }); 노력하다{ 0$a; }catch(예외 $e){ echo "예외 잡기"; }마지막으로{ 에코 "드디어"; }실행 결과:
<프리><코드> 구문 분석 오류: 구문 오류, 18행의 C:\Users\mao\Documents\php\index.php에 예기치 않은 '$a'(T_VARIABLE)가 있습니다. PHP 구문 분석 오류: 구문 오류, 18행의 C:\Users\mao\Documents\php\index.php에 예기치 않은 '$a'(T_VARIABLE)가 있습니다. [0.1초만에 완료]0$a 의도적으로 작성했는데 예외가 처리되지 않은 이유는 무엇입니까?
PHP7의 try{}catch(Error){}
를 시도해 볼 수 있습니다.http://php.net/manual/en/clas...
으아악구문 오류는 시스템에서 가장 먼저 경고하며 시스템이 경고하는 즉시 전체 프로그램이 실행되지 않은 시스템 수준 예외입니다.
우선, 예외와 오류는 다르다는 점을 이해해야 합니다. 예외는 정상적인 논리를 벗어난 상황이고 오류는 런타임 중 오류를 의미합니다! 오류가 발생하면 전체 코드가 더 이상 실행되지 않고 프로그램이 중단됩니다. 예외가 발생하면 try catch를 사용하여 이를 포착할 수 있으며 프로그램은 계속 실행될 수 있습니다!
분명히 코드에 구문 오류가 있어서 이 프로그램을 전혀 실행할 수 없습니다. 즉, 예외가 아닌 오류가 발생했다는 뜻입니다. 그렇다면 원하는 효과를 어떻게 얻을 수 있을까요? 먼저 구문 문제를 해결해야 합니다. 아래 코드를 보세요
으아아아