모든 프로그래머는 개발 중에 실수를 겪거나 다른 이유로 인해 오류가 발생했을 수 있습니다. 물론, 사용자가 애플리케이션의 제약을 따르지 않거나 따르지 않는 경우에는 사용 시 일부 오류가 발생하기도 합니다. 다음 글은 주로 PHP에서 발생하는 일반적인 오류와 예외 처리에 대해 소개합니다.
Foreword
프로그램을 개발할 때 어떻게 해야 하는지에 대한 일반적인 문제가 있습니다. 예외와 오류를 처리합니까? 이 글에서는 PHP 오류 및 예외 처리에 대한 자세한 소개를 제공하고 참조 및 연구를 위해 공유합니다.
1 PHP 오류 처리
에 대한 자세한 소개를 살펴보겠습니다. 1. 구문 오류
2. 런타임 오류
3. 논리 오류: 오류가 표시되지 않지만 기능이 잘못되어 가장 문제가 됩니다
4. 3단계: 알림/경고/치명적인 오류(계속할 수 없음) 실행)
5. 오류 보고서 표시:
a. php.ini의 error_reporting 항목을 수정하여 다음과 같이 오류 보고서 유형을 제한할 수 있습니다: error_reporting=E_ALL & ~E_NOTICE
error_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")
error_reporting(E_ALL & ~E_NOTICE)
를 사용할 수 있습니다(권장). 6 오류 보고서를 사용자 정의합니다: set_error_handler()
예 다음과 같이 오류를 표시하기 위한 미리 결정된 매개 변수를 전달합니다.
try{ echo "开车上班<br>"; throw new Exception("车子爆胎了!"); }catch(Exception $e){//相当于Exception $e = new Exception(''); echo $e->getMessage().'<br>'; echo '换上备胎,继续上班<br>'; }
a. PHP.ini의 display_errors를 Off로 설정하고 log_errors를 On
으로 설정합니다. 로그 디렉터리 error_log="C:/XX/XX/php_error.log"
ini_set("display_errors","Off")
를 사용할 수도 있습니다. 또는 ini_get 내부적으로 설정 1. try catch가 통합되어 있으므로 중간에 코드가 있을 수 없습니다
2. Exception은 시스템의 미리 정의된 클래스입니다
3. 예외가 있는 경우 개체가 발생하면 예외 개체가 catch의 클래스에 제공됩니다.
4. try에서 예외 위치 이후의 코드는 더 이상 실행되지 않지만 계속 실행됩니다. 실행을 위해 catch로 직접 전달
set_error_handler('reportError'); 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(''); echo $e->getMessage().'<br>'; 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(''); echo $e->getMessage().'<br>'; echo $e->method().'<br>'; 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().'<br>'; echo $e->method().'<br>'; }catch(Err2 $e){ echo $e->getMessage().'<br>'; echo $e->method().'<br>'; }catch(Err3 $e){ echo $e->getMessage().'<br>'; echo $e->method().'<br>'; }
위 내용은 PHP의 오류 및 예외 처리에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!