이전 버전의 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를 잡아 보고합니다.