최고의 PHP 예외 처리 튜토리얼 2024년, 이 튜토리얼에서는 무엇 비정상,기본 사용 예외,시도 던져 잡기,예 설명 :,사용자 정의 예외 클래스를 만듭니다,예 설명 :,여러 예외,예 설명 :,Rethrows,예 설명 :,최상위 예외 핸들러 세트,예외 규칙,를 배울 수 있습니다.
정상적인 흐름을 지정 할 때 스크립트 오류를 변경하는 예외가 발생합니다.
PHP 5는 오류가 객체 지향 처리하기위한 새로운 방법을 제공합니다.
예외 처리는 특정 에러 (예외) 스크립트의 정상적인 흐름을 변경 발생시 사용된다. 이 조건은 예외라고합니다.
예외가 발생하면, 대개가 발생합니다
우리는 다른 오류 처리 방법을 표시합니다 :
참고 : 예외는 오류가 발생하는 경우에 사용한다, 코드의 다른 위치로 이동 지정된 점에 사용할 수 없습니다.
예외가 발생하면 진행하지 않는 다음 코드는 PHP는 일치하는 "캐치"블록을 찾기 위해 노력할 것입니다.
예외가 있지만 모든 해당 치료를 위해 set_exception_handler의 사용 ()와 함께 발견되지 않는 경우, 심각한 오류 (치명적 오류)가 발생, 출력 "캐치되지 않는 예외"(캐치되지 않는 예외) 오류 메시지.
의 예외를 던져하려고하자,하지만 그것을 잡으려고하지 않습니다
<?php // 创建一个有异常处理的函数 function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } // 触发异常 checkNum(2); ?>
위의 코드는 다음과 유사한 오류가 발생합니다 :
Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in /www/w3big/test/test.php:7 Stack trace: #0 /www/w3big/test/test.php(13): checkNum(2) #1 {main} thrown in /www/w3big/test/test.php on line 7
위의 예에서 나타나는 오류를 방지하기 위해, 우리는 예외를 처리 할 수있는 적절한 코드를 작성해야합니다.
적절한 처리 예외 코드를 포함해야한다 :
예외를 실행하자 :
<?php // 创建一个有异常处理的函数 function checkNum($number) { if($number>1) { throw new Exception("变量值必须小于等于 1"); } return true; } // 在 try 块 触发异常 try { checkNum(2); // 如果抛出异常,以下文本不会输出 echo '如果输出该内容,说明 $number 变量'; } // 捕获异常 catch(Exception $e) { echo 'Message: ' .$e->getMessage(); } ?>
위의 코드는 다음과 같은 오류가 발생합니다 :
Message: 变量值必须小于等于 1
위의 코드는 예외가 발생하고 잡는다 :
그러나 원리 "캐치 일치해야합니다 모든 던져"를 수행하기 위해, 당신은 누락 된 오류를 처리 할 수있는 최상위 예외 핸들러를 설정할 수 있습니다.
사용자 정의 예외 처리기를 만드는 것은 매우 간단합니다. 우리는 단순히 예외가 PHP에서 발생할 때, 당신은 그 함수를 호출 할 수 있습니다, 특별한 클래스를 만들 수 있습니다. 클래스는 예외 클래스의 확장이어야합니다.
사용자 정의 예외 클래스는 PHP의 예외 클래스에 정의 된 모든 속성을 상속, 사용자 정의 기능을 추가 할 수 있습니다.
예외 클래스를 만들어 시작
<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址'; return $errorMsg; } } $email = "someone@exampleko.com"; try { // 检测邮箱 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { // 如果是个不合法的邮箱地址,抛出异常 throw new customException($email); } } catch (customException $e) { //display custom message echo $e->errorMessage(); } ?>
이 새로운 클래스는 이전 예외 클래스의 복사, 더하기으로 ErrorMessage () 함수입니다. 그것은 기존의 클래스 속성과 메서드를 상속 그래서, 기존의 클래스의 복사본이기 때문에, 우리는의 getline () 대해서 getFile ()와 GetMessage 함수 () 같은 예외 클래스 메소드를 사용할 수 있습니다.
위의 코드는 예외가 발생하고, 사용자 정의 예외 클래스를 통해 캡처 :
당신은 다양한 상황을 감지 스크립트로 여러 예외를 사용할 수 있습니다.
여러에서는 ifkoelse 블록, 또는 코드 스위치 블록, 또는 둥지 여러 예외를 사용할 수 있습니다. 이러한 예외는 다른 예외 클래스를 사용하고 다른 오류 메시지를 반환 할 수 있습니다 :
<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址'; return $errorMsg; } } $email = "someone@example.com"; try { // 检测邮箱 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { // 如果是个不合法的邮箱地址,抛出异常 throw new customException($email); } // 检测 "example" 是否在邮箱地址中 if(strpos($email, "example") !== FALSE) { throw new Exception("$email 是 example 邮箱"); } } catch (customException $e) { echo $e->errorMessage(); } catch(Exception $e) { echo $e->getMessage(); } ?>
코드는 상기 어느 하나의 조건이 만족되지 않는 경우, 예외가 발생 개의 조건을 테스트 :
customException 클래스 예외가 발생하지만 기본 예외 핸들 예외를 포착, customException을 잡은되지 않습니다.
예외가 발생하면 경우에, 당신은 그것을 처리 할 수있는 표준 방법과 다를하실 수 있습니다. 다시 "캐치"블록에서 발생 될 수 있습니다.
스크립트는 사용자의 시스템 오류에서 숨겨진해야합니다. 프로그래머가 시스템 에러는 중요 할 수 있지만, 사용자는 그들이 관심이 없다. 사용자가 사용하기 위해 쉽게하기 위해, 당신은 상대적으로 사용자에게 친숙한 메시지와 함께 다시 예외를 던질 수 :
<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = $this->getMessage().' 不是一个合法的 E-Mail 地址。'; return $errorMsg; } } $email = "someone@example.com"; try { try { // 检测 "example" 是否在邮箱地址中 if(strpos($email, "example") !== FALSE) { // 如果是个不合法的邮箱地址,抛出异常 throw new Exception($email); } } catch(Exception $e) { // 重新抛出异常 throw new customException($email); } } catch (customException $e) { // 显示自定义信息 echo $e->errorMessage(); } ?>
이 문자열 "예"를 포함하는 경우, 상기 코드가 전자 메일 주소를 검출한다. 이 경우, 다시 예외가 발생합니다 :
예외가 현재 "시도"블록에서 발견되지 않으면, 더 높은 레벨의 캐치 블록을 찾는다.
set_exception_handler () 함수는 사용자 정의 된 모든 기능 캐치되지 않는 예외를 처리하도록 설정 될 수있다.
<?php function myException($exception) { echo "<b>Exception:</b> " , $exception->getMessage(); } set_exception_handler('myException'); throw new Exception('Uncaught Exception occurred'); ?>
다음 위 코드의 출력은 :
Exception: Uncaught Exception occurred
위의 코드에서, 거기에는 "캐치"블록 없지만 최상위 예외 핸들러가 트리거. 이 기능은 모든 캐치되지 않는 예외를 캡처하는 데 사용되어야한다.
한마디로 : 당신이 예외를 던질 경우, 당신은 그것을 잡을해야합니다.