이전 버전의 PHP에서는 예외만 처리할 수 있었습니다. 오류를 처리할 수 없었습니다. 치명적인 오류의 경우 전체 응용 프로그램 또는 응용 프로그램의 일부를 중지하는 데 사용되었습니다. 이 문제를 극복하기 위해 PHP 7은 예외와 오류를 모두 처리하는 throwableinterface를 추가했습니다.
예외: 치명적이고 복구 가능한 오류가 발생할 때마다 PHP 7은 전체 애플리케이션 또는 스크립트 실행을 중단하는 대신 예외를 발생시킵니다.
오류: PHP 7에서는 TypeError, ArithmeticError, ParserError 및 AssertionError가 발생하지만 경고 및 알림 오류는 변경되지 않은 상태로 유지됩니다. try/catch 블록을 사용하여 오류 인스턴스를 catch할 수 있으며 이제 FatalErrors에서 오류 인스턴스를 throw할 수 있습니다. PHP 7에서는 throwable을 구현하기 위해 Exception 및 Error라는 두 가지 예외 분기를 통합하기 위해 throw 가능한 인터페이스가 추가되었습니다.
예시
<?php class XYZ { public function Hello() { echo "class XYZ\n"; } } try { $a = new XYZ(); $a->Hello(); $a = null; $a->Hello(); } catch (Error $e) { echo "Error occurred". PHP_EOL; echo $e->getMessage() . PHP_EOL ; echo "File: " . $e->getFile() . PHP_EOL; echo "Line: " . $e->getLine(). PHP_EOL; } echo "Continue the PHP code\n"; ?>
출력
위 프로그램에서 다음 오류가 발생합니다 -
class XYZ Error occurred Call to a member function Hello() on null File: /home/cg/root/9008538/main.php Line: 11 Continue with the PHP code
참고: 위의 예에서 우리는 null 객체에 대한 메서드를 호출합니다. catch는 예외를 처리하고 PHP 코드를 계속하는 데 사용됩니다.
산술 오류
산술 오류의 DivisionByZeroError를 사용합니다. 그러나 여전히 나눗셈 연산자에 대한 경고 오류가 발생합니다.
예:산술 오류
<?php $x = 10; $y = 0; try { $z = intdiv($x , $y); } catch (DivisionByZeroError $e) { echo "Error has occured\n"; echo $e->getMessage() . PHP_EOL ; echo "File: " . $e->getFile() . PHP_EOL; echo "Line: " . $e->getLine(). PHP_EOL; } echo "$z \n"; echo " continues with the PHP code\n"; ?>
출력
위 프로그램의 출력은 경고 오류와 함께 실행됩니다 -
Division by zero File: /home/cg/root/9008538/main.php Line: 5 continues with the PHP code
참고: 위의 프로그램에서 우리는 intdiv() 함수 내에서 DivisionByZeroError를 잡아 보고합니다.