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 오류
오류 오류
예외
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 }
그래서 로그를 통해 기록할 수 있습니다.
function call_method($obj) { $obj->method(); }try { call_method(null); // oops! } catch (EngineException $e) { echo "Exception: {$e->getMessage()}\n"; }//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
예외가 포착되지 않으면 PHP는 현재와 동일한 치명적인 오류를 계속 발생시킵니다.
위 내용은 PHP7의 예외 처리 코드 예제에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!