Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

PHP 7의 예외 및 오류


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