Home  >  Article  >  Backend Development  >  PHP7 error handling and exception handling methods

PHP7 error handling and exception handling methods

小云云
小云云Original
2018-01-11 10:36:271925browse

This article mainly shares with you an error handling and exception handling method (detailed explanation) based on PHP7. It has a good reference value and I hope it will be helpful to everyone. Let’s follow the editor to take a look, I hope it can help everyone.

PHP7 Error Handling

PHP 7 changes the way most errors are reported. Unlike the traditional (PHP 5) error reporting mechanism, most errors are now thrown as Error exceptions.

This Error exception can be caught by the first matching try / catch block just like the Exception exception. If there is no matching catch block, the exception handling function (previously registered through set_exception_handler()) is called for processing. If an exception handler has not been registered, it is handled in the traditional way: it is reported as a Fatal Error.

The Error class does not inherit from the Exception class, so you cannot use catch (Exception e)... to catch Error. You can use catch(Errore) { ... }, or catch Error by registering an exception handling function (set_exception_handler()).

Error hierarchy

Throwable
 Error
  ArithmeticError
   pisionByZeroError
  AssertionError
  ParseError
  TypeError
 Exception
  ...
try
{
 // Code that may throw an Exception or Error.
}
catch (Throwable $t)
{
 // Executed only in PHP 7, will not match in PHP 5
}
catch (Exception $e)
{
 // Executed only in PHP 5, will not be reached in PHP 7
}
up
down
9
lubaev dot ka at gmail dot com ¶
11 months ago
php 7.1
try {
 // Code that may throw an Exception or ArithmeticError.
} catch (ArithmeticError | Exception $e) {
 // pass
}

Extend (extend) PHP's built-in exception handling class

Users can extend PHP's built-in exception handling class with a custom exception handling class. The following code illustrates which properties and methods in the built-in exception handling class are accessible and inherited by subclasses.

Example #1 Built-in exception handling class


如果使用自定义的类来扩展内置异常处理类,并且要重新定义构造函数的话,建议同时调用 parent::__construct() 来检查所有的变量是否已被赋值。当对象要输出字符串的时候,可以重载 __toString() 并自定义输出的样式。
 Note:
 Exception 对象不能被复制。尝试对 Exception 对象复制 会导致一个 E_ERROR 级别的错误。
code}]: {$this->message}\n";
 }
 public function customFunction() {
  echo "A custom function for this type of exception\n";
 }
}

/**
 * 创建一个用于测试异常处理机制的类
 */
class TestException
{
 public $var;
 const THROW_NONE = 0;
 const THROW_CUSTOM = 1;
 const THROW_DEFAULT = 2;
 function __construct($avalue = self::THROW_NONE) {
  switch ($avalue) {
   case self::THROW_CUSTOM:
    // 抛出自定义异常
    throw new MyException('1 is an invalid parameter', 5);
    break;
   case self::THROW_DEFAULT:
    // 抛出默认的异常
    throw new Exception('2 is not allowed as a parameter', 6);
    break;
   default: 
    // 没有异常的情况下,创建一个对象
    $this->var = $avalue;
    break;
  }
 }
}

Related recommendations:

Detailed introduction to PHP7 error handling mechanism

Detailed explanation of the key to doubling the performance of PHP7

How to build a performance testing environment for PHP7

The above is the detailed content of PHP7 error handling and exception handling methods. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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