>백엔드 개발 >PHP 튜토리얼 >PHP 예외 처리Exception class_php 기술

PHP 예외 처리Exception class_php 기술

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 20:03:171237검색

예외는 지정된 오류가 발생할 때 스크립트의 일반적인 흐름을 변경하는 데 사용됩니다. 예외란 무엇입니까? PHP 5는 오류 처리에 대한 새로운 객체 지향 접근 방식을 제공합니다. 예외 처리는 지정된 오류(예외) 상황이 발생할 때 스크립트의 정상적인 흐름을 변경하는 데 사용됩니다. 이러한 상황을 예외라고 합니다. 예외가 트리거되면 일반적으로 발생하는 상황은 다음과 같습니다. 현재 코드 상태가 저장됩니다. 코드 실행이 사전 정의된 예외 핸들러 함수로 전환됩니다. 상황에 따라 핸들러는 저장된 코드 상태에서 코드 실행을 다시 시작하거나, 스크립트 실행을 종료하거나, 다음에서 시작할 수 있습니다. 코드의 다른 곳에서 스크립트를 계속 실행하면 다양한 오류 처리 방법이 표시됩니다. 예외의 기본 사용 사용자 정의 예외 처리기 생성 여러 예외 예외 다시 발생 최상위 예외 처리기 설정

예외의 기본 사용 예외가 발생하면 후속 코드는 계속 실행되지 않으며 PHP는 일치하는 "catch" 코드 블록을 찾으려고 시도합니다. 예외가 catch되지 않고 set_Exception_handler()를 사용하여 적절하게 처리되지 않으면 심각한 오류(치명적 오류)가 발생하고 "Uncaught Exception" 오류 메시지가 출력됩니다. catch하지 않고 예외를 던져 보겠습니다.

1)
 {
 throw new Exception("Value must be 1 or below");
 }
 return true;
 }
 
//trigger exception
checkNum(2);
?>

위 코드에서는 다음과 유사한 오류가 발생합니다. 치명적인 오류: C:webfoldertest.php:6에서 '값은 1 이하여야 합니다'라는 메시지와 함께 포착되지 않은 예외 '예외' 스택 추적: #0 C:webfoldertest.php (12): checkNum(28) #1 {main} throw in C:webfoldertest.php on line 6 Try, throw and catch 위 예제의 오류를 방지하려면 예외를 처리하는 적절한 코드를 만들어야 합니다. 핸들러 처리에는 다음이 포함되어야 합니다. Try - 예외를 사용하는 함수는 "try" 블록 내에 있어야 합니다. 예외가 트리거되지 않으면 코드는 평소대로 계속 실행됩니다. 그러나 예외가 트리거되면 예외가 발생합니다. Throw - 예외를 트리거하는 방법을 지정합니다. 각 "throw"는 최소한 하나의 "catch" Catch와 일치해야 합니다. "catch" 코드 블록은 예외를 포착하고 예외 정보가 포함된 객체를 생성합니다.

예외를 발생시키자:

1)
 {
 throw new Exception("Value must be 1 or below");
 }
 return true;
 }
//在 "try" 代码块中触发异常
try
 {
 checkNum(2);
 //If the exception is thrown, this text will not be shown
 echo 'If you see this, the number is 1 or below';
 }
//捕获异常
catch(Exception $e)
 {
 echo 'Message: ' .$e->getMessage();
 }
?>

위 코드에서는 다음과 유사한 오류가 발생합니다. 메시지: 값은 1 이하여야 합니다. 설명 예: 위 코드는 예외를 발생시키고 이를 포착합니다.

checkNum() 함수를 만듭니다. 숫자가 1보다 큰지 여부를 감지합니다. 그렇다면 예외를 발생시킵니다. "try" 블록에서 checkNum() 함수를 호출합니다. checkNum() 함수에서 예외가 발생합니다. "catch" 코드 블록은 예외를 수신하고 예외 정보가 포함된 객체($e)를 생성합니다. 이 예외 개체에서 $e->getMessage()를 호출하여 이 예외의 오류 메시지를 출력합니다

그러나 "각 투구는 캐치에 대응해야 한다"는 원칙을 따르기 위해 최상위 예외 핸들러를 설정하여 누락된 오류를 처리할 수 있습니다. 사용자 정의 예외 클래스 생성 사용자 정의 예외 처리기를 생성하는 것은 매우 간단합니다. 우리는 PHP에서 예외가 발생할 때 함수를 호출할 수 있는 특수 클래스를 만들었습니다. 이 클래스는 예외 클래스의 확장이어야 합니다.

이 사용자 정의 예외 클래스는 PHP 예외 클래스의 모든 속성을 상속하며 여기에 사용자 정의 기능을 추가할 수 있습니다. 예외 클래스를 생성하는 것부터 시작해 보겠습니다.

getLine().' in '.$this->getFile().': '.$this->getMessage().' is not a valid E-Mail address';
 return $errorMsg;
 }
 }
 
$email = "someone@example...com";
 
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
 {
 //throw exception if email is not valid
 throw new customException($email);
 }
 }
 
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

이 새 클래스는 이전 예외 클래스의 복사본과 errorMessage() 함수입니다. 기존 클래스의 복사본이기 때문에 기존 클래스의 속성과 메서드를 상속받으며, getLine(), getFile(), getMessage() 등 예외 클래스의 메서드를 사용할 수 있습니다. 예제 설명: 위의 코드는 예외를 발생시키고 사용자 정의 예외 클래스를 통해 이를 포착합니다. customException() 클래스는 이전 예외 클래스의 확장으로 생성됩니다. 이런 방식으로 이전 클래스의 모든 속성과 메서드를 상속합니다. errorMessage() 함수를 만듭니다. 전자 메일 주소가 잘못된 경우 이 함수는 $email 변수를 잘못된 전자 메일 주소 문자열로 설정하고 "try" 코드 블록을 실행합니다. 해당 전자 메일 주소는 예외입니다. "catch" 코드 블록이 예외를 포착하고 오류 메시지를 표시합니다

여러 예외 스크립트에 여러 예외를 사용하여 여러 상황을 감지할 수 있습니다. 여러 if..else 블록이나 스위치 블록을 사용하거나 여러 예외를 중첩할 수 있습니다. 이러한 예외는 다른 예외 클래스를 사용하고 다른 오류 메시지를 반환할 수 있습니다.

getLine().' in '.$this->getFile()
.': '.$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}
 
$email = "someone@example.com";
 
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
 {
 //throw exception if email is not valid
 throw new customException($email);
 }
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
 {
 throw new Exception("$email is an example e-mail");
 }
 }
 
catch (customException $e)
 {
 echo $e->errorMessage();
 }
 
catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>

例子解释: 上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:

customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。 创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。 执行 "try" 代码块,在第一个条件下,不会抛出异常。 由于 e-mail 含有字符串 "example",第二个条件会触发异常。 "catch" 代码块会捕获异常,并显示恰当的错误消息

如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常。

重新抛出异常 有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "catch" 代码块中再次抛出异常。 脚本应该对用户隐藏系统错误。对程序员来说,系统错误也许很重要,但是用户对它们并不感兴趣。为了让用户更容易使用,您可以再次抛出带有对用户比较友好的消息的异常:

getMessage().' is not a valid E-Mail address.';
 return $errorMsg;
 }
 }
 
$email = "someone@example.com";
 
try
 {
 try
 {
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
 {
 //throw exception if email is not valid
 throw new Exception($email);
 }
 }
 catch(Exception $e)
 {
 //re-throw exception
 throw new customException($email);
 }
 }
 
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

例子解释: 上面的代码检测在邮件地址中是否含有字符串 "example"。如果有,则再次抛出异常:

customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。 创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。 把 $email 变量设置为一个有效的邮件地址,但含有字符串 "example"。 "try" 代码块包含另一个 "try" 代码块,这样就可以再次抛出异常。 由于 e-mail 包含字符串 "example",因此触发异常。 "catch" 捕获到该异常,并重新抛出 "customException"。 捕获到 "customException",并显示一条错误消息。 如果在其目前的 "try" 代码块中异常没有被捕获,则它将在更高层级上查找 catch 代码块。 设置顶层异常处理器 (Top Level Exception Handler) set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。

getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>

以上代码的输出应该类似这样: Exception: Uncaught Exception occurred 在上面的代码中,不存在 "catch" 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。

异常的规则 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。 使用多个 catch 代码块可以捕获不同种类的异常。 可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。

简而言之:如果抛出了异常,就必须捕获它。

以上就是关于PHP异常处理Exception类的全部内容介绍,希望对大家的学习有所帮助。

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