> 백엔드 개발 > PHP7 > 본문

PHP7의 오류와 예외를 함께 분석

藏色散人
풀어 주다: 2023-02-18 08:38:01
앞으로
2225명이 탐색했습니다.

추천: "PHP7 튜토리얼"

PHP 언어가 단순한 이유 중 하나는 PHP 언어가 점점 더 발전함에 따라 PHP의 오류 처리 메커니즘입니다. 현대에는 예외도 나타납니다. 이 블로그 게시물은 시스템 이해를 돕기 위해 오류와 예외에 대해서만 설명합니다. 또한 예외의 존재는 모든 언어에 공통되므로 예외 메커니즘을 이해하려면 언어를 배우는 것이 필수적입니다.

오류란 무엇입니까

PHP 언어에서 비정상적인 상황(예: 데이터베이스 연결 실패 또는 함수 매개변수 전송 오류)이 발생하면 일부 오류는 E_ERROR 및 E_CORE_ERROR 오류 외에도 여러 유형으로 분류될 수 있습니다. 다른 오류는 프로그램을 종료하지 않습니다. PHP가 사람들을 단순하게 만드는 이유는 프로그램이 오류를 자주 보고하지 않아 사람들에게 매끄럽고 편리한 글쓰기라는 착각을 주기 때문입니다. PHP 프로그램이 좋지 않습니다. 예를 들어, mysql_fetch_array 쿼리에서 네트워크 오류가 발생하여 FALSE를 반환할 때(프로그램이 종료되지 않음) 호출 프로그램이 쿼리에 일치하는 데이터가 없다고 생각하면 프로그램은 본질적으로 문제가 있는 것입니다.
php.ini의 error_reporting 명령을 통해 또는 동적으로 error_reporting() 함수를 호출하여 보고할 오류 유형을 선택할 수 있습니다. display_errors 명령을 통해 오류가 온라인으로 출력되는지 여부를 제어할 수 있습니다.


오류를 올바르게 사용하는 방법

시스템 기능인지 아니면 사용자 정의 기능인지 내부적으로 오류가 발생하면 일반적으로 호출자에게 어떻게 알립니까? TRUE 또는 FALSE를 반환하는 함수입니다. ● 호출자는 오류가 발생했다는 사실만 알지만 반환되는 오류 정보가 너무 적고 오류 유형에 대한 설명이 부족합니다. 처리 논리와 오류 처리가 혼합되어 생성된 코드가 매우 명확하지 않습니다. 약간의 트릭: 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 'Caught Exception: ', $e->getMessage(), "\n";
    throw $e;
}`
로그인 후 복사


Exception 모범 사례

● 예외를 사용하면 개발자가 비즈니스 로직 작성에 집중할 수 있습니다. ● 확장 가능한 예외를 작성하는 것은 매우 기술적입니다.

● 예외만 잡아야 하지 않나요? 이 계층에서 처리할 수 있는 예외를 캡처하고 처리할 수 없는 예외를 업스트림 코드에서 처리하도록 합니다.
PHP7의 예외

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

그러나 예외는 해결 방법을 통해 균일하게 사용할 수 있습니다.

● 오류 예외오류 예외는 PHP에서 정의됩니다. 이 예외는 Exception과 평행합니다. PHP7에서는 Error 예외로 인해 많은 오류가 발생합니다. 이렇게 하면 예외를 균일하게 사용할 수 있습니다.

`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의 오류와 예외를 체계적으로 이해하기


위 내용은 PHP7의 오류와 예외를 함께 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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