PHP의 오류와 예외를 체계적으로 이해

藏色散人
풀어 주다: 2023-04-07 19:18:02
앞으로
1837명이 탐색했습니다.

PHP 언어가 단순한 이유 중 하나는 PHP의 오류 처리 메커니즘입니다. PHP 언어가 점점 더 현대화되면서 예외도 등장합니다. 또한, 이 블로그 게시물에서는 시스템의 이해를 돕기 위해 오류와 예외에 대해서만 설명합니다. , 어떤 종류의 언어든 예외가 존재하는 것은 흔한 일이므로 언어를 배우고 예외 메커니즘을 이해하는 것이 필수적입니다.

오류란 무엇입니까

PHP 언어에서 비정상적인 상황이 발생하는 경우 데이터베이스를 연결할 수 없거나 함수 매개변수 전송 오류 등) 일부 오류가 보고됩니다. E_ERROR 및 E_CORE_ERROR 오류를 제외하고 다른 오류는 프로그램을 종료하지 않습니다. 사람들이 느끼는 단순함은 오류 보고가 사람들에게 매끄럽고 편리한 작성이라는 환상을 줍니다.

예를 들어 mysql_fetch_array 쿼리의 경우 PHP 프로그램의 엄격함과 정확성이 훨씬 떨어지는 것도 바로 이 때문입니다. 네트워크 오류가 발생하고 FALSE를 반환합니다(프로그램이 종료되지 않음). 호출 프로그램이 쿼리에 일치하는 데이터가 없다고 생각하면 프로그램은 본질적으로 잘못된 것입니다.

php.ini의 error_reporting 명령을 통해 또는 error_reporting을 동적으로 호출합니다. () 함수를 사용하면 보고할 오류 유형을 선택할 수 있으며, 오류가 온라인으로 출력되는지 여부를 display_errors 명령을 통해 제어할 수 있습니다. error_log 명령은 오류를 로그에 출력하는 방법을 제어할 수 있습니다.

시스템 기능이든 사용자 정의 기능이든 내부적으로 오류가 발생하면 어떻게 호출자에게 알릴 수 있나요? 일반적으로 TRUE 또는 FALSE를 반환하는 함수로 표시됩니다.

● 호출자는 오류가 발생했다는 것만 알지만 반환된 오류 정보가 너무 적고 오류 유형에 대한 설명이 부족합니다. ● 프로그램 처리 논리와 오류 처리가 혼합되어 생성된 코드가 매우 명확하지 않습니다.

A. 작은 요령: error_get_last() 함수는 최근 오류에 대한 구체적인 이유를 반환합니다.

모범 사례:

● 모든 오류를 호스팅하는 set_error_handler() 함수

● Trigger_error() 함수는 사용자 정의 오류를 트리거할 수 있으며 함수의 return 문을 대체하는 데 사용됩니다. ● 모든 오류를 로그에 출력하고 오류 유형을 정의합니다.

● 사용자에게 더 친숙한 방법으로 오류를 반환하는 등 오류를 표시합니다.

● display_errors 명령은 프로덕션 환경에서는 꺼야 하고 개발 환경에서는 켜야 합니다

오래된 PHP 프레임워크 Codeigniter는 오류를 처리하는 방식을 통해 배울 수 있습니다

function _error_handler($severity, $message, $filepath, $line)
{
    $is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity);
    //输出500错误HTTP状态码
    if ($is_error) {
        set_status_header(500);
    }
    //对于不需要处理的错误则直接中断
    if (($severity & error_reporting()) !== $severity) {
        return;
    }
    //将所有的错误记录到日志中
    $_error =& load_class('Exceptions', 'core');
    $_error->log_exception($severity, $message, $filepath, $line);
    //友好的输出所有错误
    if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
        $_error->show_php_error($severity, $message, $filepath, $line);
    }
    //假如致命错误则直接退出
    if ($is_error) {
        exit(1);   
    }
}
set_error_handler('_error_handler');
로그인 후 복사

예외란 무엇입니까

Exception도 오류입니다. 다음과 같은 특징이 있습니다.

● 예외는 사용자 정의할 수 있고 SPL은 다양한 유형의 예외를 제공하며 확장도 가능합니다.● 예외에 대한 가장 일반적인 작업은 캡처이므로 개발 운영자는 이를 기반으로 후속 처리를 수행할 수 있습니다. 예를 들어, 예외 상황에 따라 사용자에게 친숙한 프롬프트를 반환하거나 계속해서 예외를 발생시키고 예외가 발견되지 않으면 프로그램이 직접 종료됩니다. .

● 예외에 대한 또 다른 조치는 함수를 통해 비즈니스 로직을 작성하고 예상치 못한 상황이 발생하면 예외를 직접 발생시키는 것입니다. 프로그램이 이를 포착하지 못하면 코드 실행이 직접 종료됩니다

● PHP에서 예외를 포착할 수 없으면 시스템 오류 로그에 치명적인 오류로 기록됩니다

직관적인 코드를 통해 설명합니다:

function inverse($x)
{
    if ($x < 10) {
        throw new Exception(&#39;x<10&#39;);
    } elseif ($x >= 10 and $x < 100) {
        throw new LogicException(&#39;x>=10 and x<100&#39;);
    }
    return $x;
}
try {
    echo inverse(2)."\n";
} catch (LogicException $e) {
    echo &#39;Caught LogicException: &#39;, $e->getMessage(), "\n";
} catch (Exception $e) {
    echo &#39;Caught Exception: &#39;, $e->getMessage(), "\n";
    throw $e;
}
로그인 후 복사

The 최고의 예외 연습

● 예외는 코드를 더 명확하게 만들고 개발자가 비즈니스 로직 작성에 집중할 수 있도록 해줍니다.

● 확장 가능한 예외를 작성하는 것은 매우 기술적인 일입니다.

● 예외 포착만으로는 부족하지 않나요?

PHP7의 예외

PHP7에서는 오류를 대체하기 위해 예외를 사용하도록 권장하지만 오류 처리 메커니즘을 뒤집는 것은 불가능합니다. 모두 호환되어야 하므로 천천히 전환하면 됩니다.

하지만 예외는 유연한 방법을 통해 균일하게 사용할 수 있습니다.

● 오류 예외

PHP는 오류 예외를 정의합니다. juxtaposed,

엄격 모드를 켜면 PHP7에서 오류 예외로 인해 많은 오류가 발생합니다. 이런 식으로 예외를 균일하게 사용할 수 있습니다.

declare (strict_types = 1);
function add(int $a, int $b)
{
    return $a + $b;
}
try {
    echo add("3", "4");
}
catch (TypeError $e) { //TypeError继承自Error
    echo $e->getMessage();
}
로그인 후 복사

ErrorException

ErrorException은 Exception을 상속합니다.

우리는 전달할 수 있습니다. set_error_handler() 이 함수는 모든 오류를 ErrorException으로 변환합니다. 이렇게 하면 예외를 즐겁고 균일하게 사용할 수 있습니다.

위 내용은 PHP의 오류와 예외를 체계적으로 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:juejin.im
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿