목차
예외 처리
set_error_handler()" >

set_error_handler()

set_error_handler()
set_exception_handler()
register_shutdown_function()
rrreee
백엔드 개발 PHP7 php7의 예외 및 오류 처리에 대한 자세한 설명

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

Mar 30, 2021 am 10:38 AM

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의 오류에도 레벨이 있습니다
  • 구문 분석 오류</code > ><code>치명적인 오류 > 완화 > 알림 >지원 중단됨
  • 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()< /code></p><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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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