Home > Backend Development > PHP Tutorial > PHP exception handling Exception class, exception handling exception_PHP tutorial

PHP exception handling Exception class, exception handling exception_PHP tutorial

WBOY
Release: 2016-07-12 09:03:37
Original
924 people have browsed it

PHP exception handling Exception class, exception handling exception

Exception (Exception) is used to change the normal flow of the script when a specified error occurs. What is an exception? PHP 5 provides a new object-oriented approach to error handling. Exception handling is used to change the normal flow of the script when a specified error (exception) situation occurs. This situation is called an exception. When an exception is triggered, what typically happens: The current code state is saved Code execution is switched to a predefined exception handler function Depending on the situation, the handler may restart code execution from the saved code state, terminate script execution, or start from Continuing to execute the script elsewhere in the code we will show different error handling methods: Basic use of exceptions Creating custom exception handlers Multiple exceptions Re-throwing exceptions Setting up top-level exception handlers

Basic use of exceptions When an exception is thrown, the subsequent code will not continue to execute, and PHP will try to find a matching "catch" code block. If the exception is not caught and is not handled accordingly using set_exception_handler(), a serious error (fatal error) will occur and an "Uncaught Exception" error message will be output. Let's try throwing an exception without catching it:

1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }

//trigger exception
checkNum(2);
?>
Copy after login

The above code will get an error similar to this: Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in C:webfoldertest.php:6 Stack trace: #0 C:webfoldertest.php (12): checkNum(28) #1 {main} thrown in C:webfoldertest.php on line 6 Try, throw and catch To avoid the errors in the above example, we need to create appropriate code to handle exceptions. Handling handlers should include: Try - Functions that use exceptions should be inside a "try" block. If no exception is triggered, the code continues execution as usual. But if an exception is triggered, an exception will be thrown. Throw - This specifies how to trigger the exception. Each "throw" must correspond to at least one "catch" Catch - the "catch" code block will catch the exception and create an object containing the exception information

Let’s trigger an exception:

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();
 }
?>
Copy after login

The above code will get an error similar to this: Message: Value must be 1 or below Example explanation: The above code throws an exception and catches it:

Create checkNum() function. It detects whether the number is greater than 1. If so, throw an exception. Call the checkNum() function in the "try" block. An exception is thrown in the checkNum() function. The "catch" code block receives the exception and creates an object ($e) containing the exception information. Output the error message from this exception by calling $e->getMessage() from this exception object

However, in order to follow the principle of "each throw must correspond to a catch", you can set up a top-level exception handler to handle missed errors. Creating a Custom Exception Class Creating a custom exception handler is very simple. We simply created a specialized class whose functions are called when an exception occurs in PHP. This class must be an extension of the exception class.

This custom exception class inherits all properties of PHP's exception class, and you can add custom functions to it. Let’s start by creating the exception class:

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();
 }
?>
Copy after login

This new class is a copy of the old exception class, plus the errorMessage() function. Just because it is a copy of the old class, it inherits the properties and methods from the old class, and we can use the methods of the exception class, such as getLine(), getFile(), and getMessage(). Example explanation: The above code throws an exception and catches it through a custom exception class: The customException() class is created as an extension of the old exception class. This way it inherits all properties and methods of the old class. Create errorMessage() function. If the e-mail address is illegal, the function returns an error message. Sets the $email variable to an illegal e-mail address string and executes the "try" code block. Since the e-mail address is illegal, an exception is thrown. The "catch" code block catches the exception and displays the error message

Multiple exceptions You can use multiple exceptions for a script to detect multiple situations. You can use multiple if..else blocks, or a switch block, or nest multiple exceptions. These exceptions can use different exception classes and return different error messages:

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();
 }
?>
Copy after login

Explanation of the example: The above code tests two conditions. If any condition is not true, an exception will be thrown:

The customException() class was created as an extension of the old exception class. This way it inherits all properties and methods of the old class. Create errorMessage() function. If the e-mail address is not valid, this function returns an error message. Execute the "try" block of code, and in the first condition, no exception will be thrown. Since the e-mail contains the string "example", the second condition triggers an exception. The "catch" block will catch the exception and display the appropriate error message

If customException is not caught and the base exception is caught tightly, the exception is handled there.

重新抛出异常 有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "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();
 }
?>
Copy after login

例子解释: 上面的代码检测在邮件地址中是否含有字符串 "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');
?>
Copy after login

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

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

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1079206.htmlTechArticlePHP 异常处理 Exception 类,异常处理exception 异常(Exception)用于在指定的错误发生时改变脚本的正常流程。 什么是异常? PHP 5 提供了一种新的...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template