> 백엔드 개발 > PHP 튜토리얼 > PHP7의 예외 처리 코드 예제에 대한 자세한 소개

PHP7의 예외 처리 코드 예제에 대한 자세한 소개

黄舟
풀어 주다: 2023-03-06 14:10:02
원래의
1389명이 탐색했습니다.

머리말

PHP7의 변경 사항 중 더 큰 영향을 미치는 변경 사항은 예외 처리입니다.

개요

PHP를 통해 직접 처리하는 예외가 더 많습니다. 이전 PHP5와 다른 점은 Error 예외를 통해 발생하는 예외가 더 많다는 점입니다.

일반적인 확장과 마찬가지로 해당 catch 블록이 일치할 때까지 오류 예외가 계속해서 나타납니다. 일치하는 항목이 없으면 set_exception_handler() 세트가 트리거되어 처리를 수행합니다. 기본 예외 처리기가 없으면 예외는 치명적인 오류로 변환되어 기존 오류처럼 처리됩니다.

Error는 오류 계층 구조의 예외를 상속하지 않으므로 catch (Exception $e) { ... }와 같은 코드는 PHP5에서 해당 예외를 포착하지 않습니다. catch (Error $e) { ... } 또는 set_exception_handler() 코드를 사용하여 오류를 처리할 수 있습니다.

잘못된 계층 구조

  • Throwable

    • ….

    • ArithmeticError 산술 오류

    • AssertionError 문 오류

    • ParseError 구문 분석 오류

    • TypeError 유형 오류

    • pisionByZeroError Divisor by 0 오류

    • 오류 오류

    • 예외

PHP RFC

Throwable Interface

function add(int $left, int $right) {
    return $left + $right;
}try {    echo add('left', 'right');
} catch (Exception $e) {    // Handle exception} catch (Error $e) { // Clearly a different type of object
    // Log error and end gracefully
    var_dump($e);
}
로그인 후 복사

여기에는 서버 500 오류가 없습니다. 그 이유는 PHP7의 오류가 이를 가로채서 서버에서 버블링되지 않기 때문입니다.

object(TypeError)#1 (7) {
  ["message":protected]=>  
  string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14"
  ["string":"Error":private]=>  string(0) ""
  ["code":protected]=>  int(0)
  ["file":protected]=>  string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
  ["line":protected]=>  int(9)
  ["trace":"Error":private]=>
  array(1) {
    [0]=>
    array(4) {
      ["file"]=>      string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
      ["line"]=>      int(14)
      ["function"]=>      string(3) "add"
      ["args"]=>
      array(2) {
        [0]=>        string(4) "left"
        [1]=>        string(5) "right"
      }
    }
  }
  ["previous":"Error":private]=>
  NULL
}
로그인 후 복사

그래서 로그를 통해 기록할 수 있습니다.

엔진의 예외(PHP 7용)

function call_method($obj) {
    $obj->method();
}try {
    call_method(null);
     // oops!
     } 
     catch (EngineException $e) {    
    echo "Exception: {$e->getMessage()}\n";
}//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
로그인 후 복사

예외가 포착되지 않으면 PHP는 현재와 동일한 치명적인 오류를 계속 발생시킵니다.

E_STRICT 통지 재분류


위 내용은 PHP7의 예외 처리 코드 예제에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿