찾다
  • 로그인
  • 가입
비밀번호 재설정 성공

당신이 관심을 갖고 있는 프로젝트를 팔로우하고 그들에 관한 최신 뉴스를 맛보세요

백엔드 개발 PHP PHP7 새로운 기능 매뉴얼 오류 처리 메커니즘 수정

오류 처리 메커니즘 수정

1. 이제 Exception과 Error라는 두 가지 예외 클래스가 있습니다.

PHP7에는 이제 Exception과 Error라는 두 가지 예외 클래스가 있습니다. 두 클래스 모두 새로운 인터페이스인 Throwable을 구현합니다. 예외 처리 코드에서 유형 힌트를 조정해야 할 수도 있습니다.

2. 일부 치명적인 오류와 복구 가능한 치명적인 오류는 대신 Error 개체를 발생시킵니다.

일부 치명적인 오류 및 복구 가능한 치명적인 오류는 이제 대신 오류 개체를 보고합니다. Error 객체는 Exception과 독립적이며 일반적인 try/catch로 포착할 수 없습니다. 편집자 주: 오류 처리 기능을 등록해야 합니다. 아래 RFC를 참조하세요.

예외로 전환된 이러한 복구 가능한 치명적인 오류는 오류 처리기를 통해 자동으로 무시될 수 없습니다. 특히 유형 힌트 오류는 무시할 수 없습니다.

3. 구문 오류는 ParseError 개체를 발생시킵니다.

구문 오류는 Error 개체에서 상속되는 ParseError 개체를 발생시킵니다. 이전에 eval()을 처리할 때 잠재적으로 오류가 발생하기 쉬운 코드에 대한 반환 값 또는 error_get_last()를 확인하는 것 외에도 ParseError 객체도 캡처해야 합니다.

4. 내부 객체의 생성 방법은 실패할 경우 항상 예외를 발생시킵니다.

내부 객체의 생성 방법은 실패할 경우 항상 예외를 발생시킵니다. 일부 이전 생성자는 NULL 또는 사용할 수 없는 개체를 반환했습니다.

5. 일부 E_STRICT 오류 수준이 조정되었습니다.


PHP 7 오류 처리

#🎜 🎜#

PHP 7에서는 대부분의 오류가 보고되는 방식이 변경되었습니다. PHP 5의 기존 오류 보고 메커니즘과 달리 이제 대부분의 오류는 오류 예외로 발생합니다.

이 오류 예외는 일반 예외처럼 try/catch 블록으로 포착될 수 있습니다. 일치하는 try/catch 블록이 없는 경우, 처리를 위해 예외 처리 함수(set_Exception_handler()에 의해 등록됨)가 호출됩니다. 예외 처리기가 등록되지 않은 경우 기존 방식으로 처리됩니다. 즉, 치명적인 오류로 보고됩니다.

Error 클래스는 Exception 클래스에서 확장되지 않으므로 catch (Exception $e) { ... }와 같은 코드는 catch할 수 없습니다. 오류에. catch (Error $e) { ... }와 같은 코드를 사용하거나 예외 처리기( set_Exception_handler())를 사용하여 오류를 포착합니다.

오류 예외 계층 구조
#🎜 🎜 #1.오류 ​​

    산술 오류       

  • AssertionError ​

  • DivisionByZeroError       

  • ParseError ​

  • TypeError

  • 2.예외

...

1458887252-2773-exception-hiearchy.jpg
# 🎜 🎜#

Example

<?php
class MathOperations 
{
   protected $n = 10;
   // 求余数运算,除数为 0,抛出异常
   public function doOperation(): string
   {
      try {
         $value = $this->n % 0;
         return $value;
      } catch (DivisionByZeroError $e) {
         return $e->getMessage();
      }
   }
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>

위 프로그램 실행의 출력 결과는 다음과 같습니다.

Modulo by zero
# 🎜🎜##🎜 🎜#


PHP 7 예외PHP 7 예외는 이전 버전과의 호환성을 위해 사용됩니다. 그리고 기존 Asserts () 기능을 강화했습니다. 프로덕션 환경에서 비용이 전혀 들지 않는 어설션을 활성화하고 사용자 지정 예외 및 오류를 발생시키는 기능을 제공합니다.

호환성을 위해 이전 버전의 API는 계속 유지됩니다. 이제 Assert()는 평가할 문자열이 아닌 첫 번째 인수가 표현식이 되도록 허용하는 언어 구성입니다. 테스트할 부울입니다.

assert() 구성

구성 항목0 - 코드 생성, 그러나 실행 중에 건너뛰기-1 - 코드 생성 없음(프로덕션 환경)
기본값#🎜 🎜 ## ####옵션 값#### ## ## ## ## ###Zend.Assertions#🎜🎜 #####1#### 🎜 🎜#

1 - 코드 생성 및 실행(개발 모드)


# Assert.Exceptionion 실패 시 발생하며, 예외 객체가 발생하거나, 예외가 제공되지 않으면 AssertionError 객체 인스턴스가 발생합니다.
  • 0 - Throwable을 사용하거나 생성합니다. 객체를 던지는 대신 객체를 기반으로 경고를 생성합니다(PHP 5와 호환 가능)
  • # 🎜🎜 #

  • parameters

    assertion

    어설션. PHP 5에서는 실행을 위한 문자열 또는 테스트를 위한 부울입니다. PHP 7에서는 임의의 값을 반환하는 표현식이 될 수 있으며 결과는 어설션이 성공했는지 여부를 나타내는 데 사용됩니다.

    description

    어설션이 실패하면 실패 메시지에 옵션 설명이 포함됩니다.

    Exception

    PHP 7에서 두 번째 매개변수는 문자열 대신 Throwable 객체일 수 있으며, 이는 어설션이 실패하고 Assert.Exception이 활성화된 경우 발생합니다. 인스턴스

    <?php
    ini_set('zend.assertions', 0);
    assert(true == false);
    echo 'Hi!';
    ?>
    위 프로그램 실행의 출력 결과는 다음과 같습니다.
    Hi!

    핫 AI 도구
    Undress AI Tool
    Undress AI Tool

    무료로 이미지를 벗다

    AI Clothes Remover
    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undresser.AI Undress
    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    Stock Market GPT
    Stock Market GPT

    더 현명한 결정을 위한 AI 기반 투자 연구

    인기 있는 도구
    메모장++7.3.1
    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전
    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기
    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6
    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전
    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)