>백엔드 개발 >PHP 튜토리얼 >PHP7 오류 처리 및 예외 처리 방법

PHP7 오류 처리 및 예외 처리 방법

小云云
小云云원래의
2018-01-11 10:36:272118검색

이 글은 주로 PHP7을 기반으로 한 오류 처리 및 예외 처리 방법(자세한 설명)을 공유합니다. 좋은 참고 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

PHP7 오류 처리

PHP 7은 대부분의 오류가 보고되는 방식을 변경합니다. 기존(PHP 5) 오류 보고 메커니즘과 달리 이제 대부분의 오류는 오류 예외로 발생합니다.

이 오류 예외는 예외 예외와 마찬가지로 첫 번째 일치하는 try/catch 블록에 의해 포착될 수 있습니다. 일치하는 catch 블록이 없으면 이전에 set_Exception_handler()를 통해 등록된 예외 처리 함수를 호출하여 처리합니다. 예외 처리기가 등록되지 않은 경우 기존 방식으로 처리됩니다. 즉, 치명적인 오류로 보고됩니다.

Error 클래스는 Exception 클래스에서 상속되지 않으므로 catch(Exception e)...를 사용하여 Error를 잡을 수 없습니다. catch(Errore) { ... }를 사용하거나 예외 처리 함수(set_Exception_handler())를 등록하여 오류를 잡을 수 있습니다.

오류 계층

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
}

PHP의 내장 예외 처리 클래스 확장(확장)

사용자는 사용자 정의 예외 처리 클래스를 사용하여 PHP의 내장 예외 처리 클래스를 확장할 수 있습니다. 다음 코드는 기본 제공 예외 처리 클래스의 어떤 속성과 메서드가 액세스 가능하고 서브클래스에서 상속되는지 보여줍니다.

예제 #1 내장된 예외 처리 클래스

<?php
class Exception
{
 protected $message = &#39;Unknown exception&#39;; // 异常信息
 private $string;       // __toString cache
 protected $code = 0;      // 用户自定义异常代码
 protected $file;       // 发生异常的文件名
 protected $line;       // 发生异常的代码行号
 private $trace;       // backtrace
 private $previous;      // previous exception if nested exception
 public function __construct($message = null, $code = 0, Exception $previous = null);
 final private function __clone();   // Inhibits cloning of exceptions.
 final public function getMessage();  // 返回异常信息
 final public function getCode();   // 返回异常代码
 final public function getFile();   // 返回发生异常的文件名
 final public function getLine();   // 返回发生异常的代码行号
 final public function getTrace();   // backtrace() 数组
 final public function getPrevious();  // 之前的 exception
 final public function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息
 // Overrideable
 public function __toString();    // 可输出的字符串
}
?>
如果使用自定义的类来扩展内置异常处理类,并且要重新定义构造函数的话,建议同时调用 parent::__construct() 来检查所有的变量是否已被赋值。当对象要输出字符串的时候,可以重载 __toString() 并自定义输出的样式。
 Note:
 Exception 对象不能被复制。尝试对 Exception 对象复制 会导致一个 E_ERROR 级别的错误。
<?php
/**
 * 自定义一个异常处理类
 */
class MyException extends Exception
{
 // 重定义构造器使 message 变为必须被指定的属性
 public function __construct($message, $code = 0, Exception $previous = null) {
  // 自定义的代码
  // 确保所有变量都被正确赋值
  parent::__construct($message, $code, $previous);
 }
 // 自定义字符串输出的样式
 public function __toString() {
  return __CLASS__ . ": [{$this->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;
  }
 }
}

관련 권장 사항:

PHP7 오류 처리 메커니즘에 대한 자세한 소개

PHP7 성능을 두 배로 높이는 핵심에 대한 자세한 설명

빌드 방법 php7을 위한 성능 테스트 환경

위 내용은 PHP7 오류 처리 및 예외 처리 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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