PHP 오류 처리 분석(핵심 기능)

藏色散人
풀어 주다: 2023-04-08 10:30:01
앞으로
2021명이 탐색했습니다.

PHP 오류 처리 분석(핵심 기능)

오류 및 예외

오류는 구문 오류와 같은 프로그램 자체의 오류를 이해할 수 있습니다. 예외는 프로그램이 예상대로 실행되지 않거나 PHP 언어의 일반적인 프로세스를 따르지 않는 경우 발생하는 경향이 있으며, 오류 및 예외를 처리하는 데 사용되는 메커니즘이 완전히 다르기 때문에 혼동을 일으키기 쉽습니다.

예를 들어, 예외를 포착하여 0으로 나누는 경우를 처리하고 싶지만 예외가 포착되기 전에 PHP가 오류를 트리거합니다.

try { $a = 5 / 0; } catch (Exception $e) { $e->getMessage(); $a = -1; // 通过异常来处理 $a 为 0 的情况,但是实际上,捕获不到该异常 } echo $a; // PHP Warning: Division by zero
로그인 후 복사

즉, PHP는 제수가 0인 경우를 오류로 발생시키고 자동으로 예외를 발생시키지 않으므로 잡을 수 없습니다. 마찬가지로, 많은 경우 PHP는 자동으로 예외를 발생시킬 수 없습니다. 예외는 if - else 문을 통해 수동으로만 발생하고 throw 메서드와 결합될 수 있습니다.

위의 상황은 주로 예외 메커니즘이 PHP가 객체 지향으로 진화한 산물이기 때문에 발생합니다. 이전에는 PHP의 오류 보고가 주로 오류 메커니즘을 통해 이루어졌습니다. 따라서 많은 경우 PHP 오류는 예외보다 더 중요했습니다. 그러나 PHP7에서는 두 가지를 통합하기 시작하여 오류가 예외처럼 발생하도록 허용합니다(이 부분은 예외 섹션에서 설명합니다).

오류 수준

PHP의 오류는 스크립트가 제대로 실행되지 않는 비정상적인 상황으로 이해될 수 있으며 오류 수준에 따라 높은 수준부터 낮은 수준까지 5가지 범주로 나눌 수 있습니다

1.구문 분석 오류또는구문 오류- 구문 분석 오류, 이 오류가 발생한 후 스크립트를 전혀 실행할 수 없습니다.Parse errorSyntax Error- 语法解析错误,触发该错误后,脚本完全无法运行;

2.Fatal Error- 致命错误,触发该错误后,后面的脚本无法继续执行;

3.Warning Error- 出现比较不恰当的地方,脚本可继续执行;

4.Notice Error- 出现不恰当的地方,但是程度比 Warning Error 低,脚本可继续执行;

5.Deprecated Error- 不推荐这么使用,未来可能会废弃,脚本可继续执行;

默认情况下,PHP 触发错误,并显示错误的级别及对应的提示。

Parse Error示例 - 语句结尾不写分号

echo "abc" // PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';
로그인 후 복사

Fatal Error示例 - 使用不存在的函数

echo "before\n"; foo(); echo "after"; // 本行无法继续执行 // before // PHP Fatal error: Uncaught Error: Call to undefined function foo()
로그인 후 복사

Warning Error 示例 - 引入不存在的文件

$a = "foo"; include('bar.php'); echo $a; // 程序继续执行 // PHP Warning: include(bar.php): failed to open stream: No such file or directory ... // foo Notice Error 示例 - 输出不存在的变量 echo $foo; echo 12345; // PHP Notice: Undefined variable: foo // 12345
로그인 후 복사

Deprecated Error示例 - 在一些字符串函数中传入数字而非字符串

strpos('12345', 3); // PHP Deprecated: strpos(): Non-string needles will be interpreted as strings in the future
로그인 후 복사

除了默认触发消息外,用户也可以使用 set_error_handler 函数自定义错误处理,大多数错误类型都可以进行自定义处理,除了E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING外。

set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed
로그인 후 복사

示例


        
로그인 후 복사

用户也可以通过 trigger_error 函数来手动触发一个用户级别的错误(E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、E_USER_DEPRECATED)。

function division($a, $b) { if($b == 0){ @trigger_error("0 不能作为除数", E_USER_NOTICE); return -1; } return $a / $b; } echo division(10, 0);
로그인 후 복사

与错误有关的配置

一些错误处理相关的常用配置

error_reporting- 设置错误的报告级别

display_errors- 是否显示错误

display_startup_error- 是否显示 PHP 启动过程中的显示

log_errors- 设置是否将脚本运行的错误信息记录到服务器错误日志或者 error_log 之中

《Modern PHP》提出了四个规则

● 一定要让 PHP 报告错误;

● 在开发环境中要显示错误;

● 在生产环境中不能显示错误;

● 在开发环境和生产环境中都要记录错误;

开发环境推荐配置

display_errors = On display_startup_error = On error_reporting = -1 log_errors = On
로그인 후 복사

生产环境推荐配置

display_errors = Off display_startup_error = Off ; 报告 Notice 以外的所有错误 error_reporting = E_ALL & ~E_NOTICE log_errors = On
로그인 후 복사

Symfony 编码规范相关

异常和错误消息字符串必须使用sprintf来进行拼接;

throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name));

当错误类型为E_USER_DEPRECATED时,需要添加@

2 - 치명적인 오류, 이 오류가 발생한 후 다음 스크립트를 계속 실행할 수 없습니다.

3.경고 오류- 부적절한 위치가 표시되지만 스크립트는 계속 실행할 수 있습니다. - 부적절한 위치가 표시되지만 정도가 경고 오류보다 낮으면 스크립트를 계속 실행할 수 있습니다.

5. 사용되지 않는 오류- 이 사용은 권장되지 않으며 다음 단계에서 중단될 수 있습니다.

기본적으로 PHP는 오류를 발생시키고 오류 수준과 해당 프롬프트를 표시합니다.

구문 분석 오류예 - 명령문 끝에 세미콜론이 없습니다. rrreee 치명적인 오류예 - 존재하지 않는 함수 사용 rrreee 경고 오류 예 - 소개 존재하지 않는 파일rrreee 사용되지 않는 오류예 - 일부 문자열 함수에서 문자열 대신 숫자 전달rrreee기본 트리거 메시지 외에도 사용자는 다음을 사용할 수도 있습니다. set_error_handler 함수 사용자 정의 오류 처리. E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING을 제외한 대부분의 오류 유형을 사용자 정의할 수 있습니다. 코드>, E_COMPILE_ERROR, E_COMPILE_WARNING. rrreee Examplerrreee 사용자는 Trigger_error 함수를 통해 사용자 수준 오류(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED)를 수동으로 트리거할 수도 있습니다. rrreee오류 관련 구성오류 처리와 관련된 몇 가지 일반적인 구성● error_reporting- 오류 보고 수준 설정● display_errors- 오류 표시 여부● display_startup_error- PHP 시작 과정에서 표시 여부● log_errors- 실행 중인 스크립트의 오류 정보를 서버에 기록할지 여부 설정 오류 로그 또는 error_log에서 "Modern PHP"는 네 가지 규칙을 제시합니다. ● PHP에서 오류를 보고하도록 하세요. ● 오류는 개발 환경에서 표시되어야 합니다. ● 오류는 프로덕션 환경에서 표시될 수 없습니다. ; ● 오류는 개발 환경과 프로덕션 환경 모두에서 기록되어야 합니다. 개발 환경에 대한 권장 구성rrreee프로덕션 환경에 대한 권장 구성rrreeeSymfony 코딩 표준 관련예외 및 오류 메시지 문자열 연결하려면 sprintf를 사용해야 합니다. throw new CommandNotFoundException(sprintf('Command "%s" does not 존재하지 않습니다.', $name));오류 유형이 인 경우 E_USER_DEPRECATED, @를 추가해야 합니다@trigger_error("foo", E_USER_DEPRECATED);더 많은 관련 PHP 지식을 보려면 php 튜토리얼을 방문하세요!

위 내용은 PHP 오류 처리 분석(핵심 기능)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!