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

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

黄舟
黄舟원래의
2017-08-22 09:41:231682검색

모든 프로그래머는 개발 중에 실수를 겪거나 다른 이유로 인해 오류가 발생했을 수 있습니다. 물론, 사용자가 애플리케이션의 제약을 따르지 않거나 따르지 않는 경우에는 사용 시 일부 오류가 발생하기도 합니다. 다음 글은 주로 PHP에서 발생하는 일반적인 오류와 예외 처리에 대해 소개합니다.

Foreword

프로그램을 개발할 때 어떻게 해야 하는지에 대한 일반적인 문제가 있습니다. 예외와 오류를 처리합니까? 이 글에서는 PHP 오류 및 예외 처리에 대한 자세한 소개를 제공하고 참조 및 연구를 위해 공유합니다.

1 PHP 오류 처리

에 대한 자세한 소개를 살펴보겠습니다. 1. 구문 오류

2. 런타임 오류

3. 논리 오류: 오류가 표시되지 않지만 기능이 잘못되어 가장 문제가 됩니다

4. 3단계: 알림/경고/치명적인 오류(계속할 수 없음) 실행)

5. 오류 보고서 표시:

a. php.ini의 error_reporting 항목을 수정하여 다음과 같이 오류 보고서 유형을 제한할 수 있습니다: error_reporting=E_ALL & ~E_NOTICEerror_reporting=E_ALL & ~E_NOTICE

     b.只修改某个脚本内的错误显示,可以使用error_reporting(E_ALL & ~E_NOTICE); (推荐)

6.自定义错误报告:set_error_handler()可以传入用以显示错误的预定参数,如下:


 set_error_handler('reportError');
 $mess="";
 function reportError($error_type,$error_message,$error_file,$error_line){
 global $mess;
 $mess.="发生错误级别为{$error_type}类型,错位信息<b>{$error_message}</b>,在文件{$error_file}中,第{$error_line}行。<br>";
 }
 getType($a);
 echo "1111111<br>";
 getType();
 echo "2222<br>";
 echo $mess;
 /*发生错误级别为8类型,错位信息Undefined variable: a,在文件F:\projects\Frame\FrameTest\BackEnd\regularExpression.php中,第24行。
 发生错误级别为2类型,错位信息gettype() expects exactly 1 parameter, 0 given,在文件F:\projects\Frame\FrameTest\BackEnd\regularExpression.php中,第26行。*/

7.记录错误日志

     a.将PHP.ini中display_errors设置为Off,log_errors设置为On

     b.自定义日志目录error_log="C:/XX/XX/php_error.log"


      c.也可以使用ini_set("display_errors","Off")

b. 스크립트에서 오류 표시를 수정하려면 error_reporting(E_ALL & ~E_NOTICE) 를 사용할 수 있습니다(권장).

6 오류 보고서를 사용자 정의합니다: set_error_handler() 예 다음과 같이 오류를 표시하기 위한 미리 결정된 매개 변수를 전달합니다.

 try{
 echo "开车上班<br>";
 throw new Exception("车子爆胎了!");
 }catch(Exception $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo &#39;换上备胎,继续上班<br>&#39;;
 }

7. 오류 로그 기록

a. PHP.ini의 display_errors를 Off로 설정하고 log_errors를 On

으로 설정합니다. 로그 디렉터리 error_log="C:/XX/XX/php_error.log"

c. ini_set("display_errors","Off")를 사용할 수도 있습니다. 또는 ini_get 내부적으로 설정


2. PHP 예외 처리


1. try catch가 통합되어 있으므로 중간에 코드가 있을 수 없습니다


2. Exception은 시스템의 미리 정의된 클래스입니다


3. 예외가 있는 경우 개체가 발생하면 예외 개체가 catch의 클래스에 제공됩니다.


4. try에서 예외 위치 이후의 코드는 더 이상 실행되지 않지만 계속 실행됩니다. 실행을 위해 catch로 직접 전달


 set_error_handler(&#39;reportError&#39;);
 function reportError($error_type,$error_message,$error_file,$error_line){
 if($error_type==E_WARNING){
 throw new Exception("错误信息:{$error_message},错误文件:{$error_file},错误行数{$error_line}");
 }
 }
 function drive($a){
 echo $a;
 }
 try{
 echo "开车上班<br>";
 drive();//忘记传参,触发自定义错误函数中警告性错误,抛出异常
 }catch(Exception $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo "换上备胎,继续上班<br>";
 }

5. 예외 처리 가능 오류 처리와 함께 사용


 class BTException extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "打开后备箱,拿出工具,换备胎";
 }
 }
 try{
 echo "开车上班<br>";
 throw new BTException("车子爆胎了!");
 }catch(BTException $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 echo "换上备胎,继续上班<br>";
 }

6. 사용자 정의 예외 클래스 a. 특정 예외 처리 메서드 정의(프롬프트를 가져오기 위한 일부 메서드만)

b. 사용자 정의 예외 클래스는 시스템 클래스의 하위 클래스여야 합니다🎜🎜🎜 c. Exception 클래스를 계속하고 생성자를 다시 작성하는 경우 잊지 마세요. 초기화를 위해 상위 클래스 생성자를 호출하려면🎜🎜🎜🎜🎜
 class Err1 extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "纠正错误1";
 }
 }
 class Err2 extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "纠正错误2";
 }
 }
 class Err3 extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "纠正错误3";
 }
 }
 $rand=rand(1,3);
 try{
 switch($rand){
 case 1:
 throw new Err1("发生错误1");
 case 2:
 throw new Err2("发生错误2"); 
 case 3:
 throw new Err3("发生错误3"); 
 }
 }catch(Err1 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }catch(Err2 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }catch(Err3 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }
🎜7. 여러 예외를 캡처합니다. 참고: try는 try🎜🎜🎜🎜rrreee🎜🎜🎜Summary🎜🎜🎜에 중첩될 수도 있습니다.

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

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