>백엔드 개발 >PHP7 >php7의 예외 및 오류 처리에 대한 자세한 설명

php7의 예외 및 오류 처리에 대한 자세한 설명

coldplay.xixi
coldplay.xixi앞으로
2021-03-30 10:38:142620검색

php7의 예외 및 오류 처리에 대한 자세한 설명

먼저 작성자의 PHP 버전은 7.2

    • 예외 및 오류 개요
        • 예외란 무엇인가요?
        • 오류란 무엇인가요? ㅋㅋㅋ
    • 추천 (무료):
    • PHP7
        • 예외 및 오류 개요
        • 예외란 무엇인가요?
        • 예외란 프로그램 운영 중 기대에 미치지 못하는 조건, 정상적인 과정과 다른 현상을 말합니다.
        예를 들어 데이터베이스에 연결했는데 모든 매개변수가 기록되었지만 링크가 연결되지 않는 경우는 예상과 다릅니다.
      try-catch로 잡을 수 있습니다
    오류란 무엇인가요?
PHP 프로그램 자체에 속하는 문제로 일반적으로 잘못된 구문 및 환경 문제로 인해 컴파일러가 검사를 통과하지 못하거나 심지어 실행에 실패하기도 합니다.

평소 접하는 온난화와 주의사항은 모두 오류일 뿐, 수준이 다를 뿐입니다. 예:

TypeError(유형 오류) 내가 지정한 함수 매개변수 유형이 전달된 매개변수와 일치하지 않습니다.

ArithmeticError(산술 오류)

ParseError(파싱 오류) 로드된 파일에 "demo.php"를 포함합니다. ”, 또는 eval()에 구문 오류가 있어 구문 분석이 실패합니다

AssertionError(어설션 오류) 이 오류는 Assert가 적용될 때 발생합니다

pisionByZeroError(분모는 0입니다) 나누기 등의 작업 중 분모는 0입니다

이를 제외하면 나머지는 모두 예외입니다.

예외 처리

이전 php5.Exception에서는 이 인터페이스를 구현했으며 try-catch에서 오류를 던질 수 있습니다

그래서 예외를 catch하려면 미래에는 예외가 오류인지 예외인지 알 수 없으므로 다음과 같은 오류가 발생할 수 있습니다.

try{
    ……
}catch(Throwable $e){
    ……
}

    레벨
  • PHP의 오류에도 레벨이 있습니다
  • 구문 분석 오류 >치명적인 오류 > 완화 > 알림 >지원 중단됨
  • Deprecated 最低级别的错误(不推荐,不建议)
    使用一些过期函数的时候会出现,程序继续执行
    
    Notice 通知级别的错误
    使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行
            E_NOTICE      // 运行时通知。表示脚本遇到可能会表现为错误的情况.
            E_USER_NOTICE // 用户产生的通知信息。Waning 警告级别的错误
    程序出问题了,需要修改代码!!!程序继续执行
            E_WARNING         // 运行时警告 (非致命错误)。
            E_CORE_WARNING    // PHP初始化启动过程中发生的警告 (非致命错误) 。
            E_COMPILE_WARNING // 编译警告
            E_USER_WARNING    // 用户产生的警告信息Fatal Error 错误级别的错误
    程序直接报错,需要修改代码!!!中断程序执行,可使用register_shutdown_function()函数在程序终止前触发一个函数
            E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本
            E_CORE_ERROR    // PHP启动时初始化过程中的致命错误
            E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
            E_USER_ERROR    // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)Parse error 语法解析错误
    语法检查阶段报错,需要修改代码!!!中断程序执行,除了修改ini文件,将错误信息写到日志中,什么也做不了
            E_PARSE  //编译时的语法解析错误
  • 사용자 정의 오류 처리기
때때로 PHP와 함께 제공되는 오류 처리기가 우리의 요구 사항을 완전히 충족할 수 없는 경우가 있습니다. 때로는 예외 처리를 수동으로 다시 작성해야 합니다.

php는 이를 처리하는 데 도움이 되는 세 가지 함수, 즉 사용자 정의할 수 있는 오류 핸들러를 호스팅하는

set_error_handler()


함수를 제공합니다. 프로세스.

이 함수 이전 코드에서 오류가 발생하면 아직 등록되지 않았기 때문에 사용자 정의 처리 함수가 호출되지 않습니다.

이 함수를 설정한 후에는 error_reporting()이 유효하지 않습니다다음 수준의 오류는 호출할 수 없습니다. 사용자 정의 함수에서 사용됨: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING 이 함수는 경고 및 참고 수준 오류 중 일부만 잡을 수 있습니다

set_Exception_handler()<p> <code>Parse error >Fatal Error > Waning > Notice >Deprecated

举例
register_shutdown_function(&#39;shutdown&#39;);function shutdown(){
    if ($error = error_get_last()) {
        var_dump($error);
    }
}$name   //没写 ; 号

自定义错误处理程序

有的时候,php 中自带的错误处理程序,并不能完全满足我们得需要,大部分时候,我们都需要手动重写异常处理。

php 给我们提供了三个函数来帮助我们来处理,分别是

set_error_handler()

  • 函数来托管错误处理程序,可自行定制错误的处理流程。
  • 如果此函数之前的代码发生错误,那么不会调用我们自定义的处理函数,因为还未注册
  • 设置此函数后 error_reporting() 将会失效
  • 以下级别的错误不能由用户定义的函数来处理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING 该函数只能捕捉我们的 部分 Warning 和 Note 级别的错误

set_exception_handler()

  • 用于没有被捕获的异常处理

register_shutdown_function()

  • 作用:注册一个会在php中止时执行的函数
  • 捕获PHP的错误:Fatal Error、Parse Error等,这个方法是PHP脚本执行结束前最后一个调用的函数,比如脚本错误、die()、exit、异常、正常结束都会调用,
  • 如果拿来用错误处理的时候,需要配合error_get_last() 它能获取最后发生的错误。
rrreee

执行结果
Parse error: syntax error, unexpected ';' in /app/swoole/errorDemo.php on line 34잡히지 않는 예외 처리에 사용

register_shutdown_function()

Function: PHP가 종료될 때 실행될 함수를 등록

PHP 잡기 오류 : Fatal Error, Parse Error 등. 이 메소드는 PHP 스크립트 실행이 끝나기 전에 호출되는 마지막 함수입니다. 예를 들어 스크립트 오류, die(), 예외 및 정상 종료가 모두 호출됩니다. 오류 처리를 위해서는 마지막에 발생한 오류를 가져올 수 있는 error_get_last()에 협조해야 합니다.

rrreee

실행 결과

파싱 오류: 구문 오류, 예상치 못한 ';' in /app/swoole/errorDemo.php 34번째 줄

으으으음 말도 안되는 소리 아닌가요? 당연히 실행되지 않나요?🎜🎜사실 그 이유는 프로그램이 실행되기 전에 우리 PHP가 먼저 우리 프로그램의 구문 문제를 확인하고 문제가 없으면 프로그램을 실행할 수 있기 때문입니다. 🎜🎜위 코드가 구문 검사를 통과하지 못했기 때문에 오류가 직접 보고되었습니다. 🎜🎜그럼 질문은요? 우리가 프레임워크 안에 있을 때 왜 프레임워크는 항상 우리에게 오류를 보고합니까? 🎜🎜프레임워크 오류 처리🎜🎜프레임워크에서는 해당 코드가 항목 파일을 통해 로드됩니다. PHP가 구문 오류를 감지하면 index.php만 확인합니다. 필요한 경우에는 감지되지 않습니다. 코드에서 오류가 발생하면 런타임에 오류가 감지되므로 프레임워크가 그에 따라 대응할 수 있습니다 🎜

위 내용은 php7의 예외 및 오류 처리에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제