Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Fehlerbehandlungs- und Ausnahmebehandlungsmethoden basierend auf PHP7

Detaillierte Erläuterung der Fehlerbehandlungs- und Ausnahmebehandlungsmethoden basierend auf PHP7

jacklove
jackloveOriginal
2018-07-02 18:05:001500Durchsuche

Der unten stehende Herausgeber wird einen Artikel über PHP7-Fehlerbehandlungs- und Ausnahmebehandlungsmethoden (ausführliche Erklärung) mit Ihnen teilen, der einen guten Referenzwert hat und ich hoffe, dass er für alle hilfreich sein wird. Folgen wir dem Editor, um einen Blick darauf zu werfen

PHP7-Fehlerbehandlung

PHP 7 hat die Art und Weise geändert, wie die meisten Fehler gemeldet werden. Im Gegensatz zum herkömmlichen Fehlerberichtsmechanismus (PHP 5) werden die meisten Fehler jetzt als Fehlerausnahmen ausgelöst.

Diese Fehlerausnahme kann genau wie die Ausnahmeausnahme vom ersten passenden Try/Catch-Block abgefangen werden. Wenn kein passender Catch-Block vorhanden ist, wird die Ausnahmebehandlungsfunktion (zuvor über set_Exception_handler() registriert) zur Verarbeitung aufgerufen. Wenn kein Ausnahmehandler registriert wurde, wird er auf herkömmliche Weise behandelt: Er wird als schwerwiegender Fehler gemeldet.

Die Error-Klasse erbt nicht von der Exception-Klasse, daher können Sie „catch (Exception e)...“ nicht verwenden, um Error abzufangen. Sie können „catch(Errore) { ... }“ verwenden oder „Error“ abfangen, indem Sie eine Ausnahmebehandlungsfunktion (set_Exception_handler()) registrieren.

Fehlerhierarchie

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
}

Erweitern Sie die integrierte Ausnahmebehandlungsklasse von PHP

Benutzer können die integrierte Ausnahmebehandlungsklasse von PHP um eine benutzerdefinierte Ausnahmebehandlungsklasse erweitern. Der folgende Code veranschaulicht, auf welche Eigenschaften und Methoden in der integrierten Ausnahmebehandlungsklasse Unterklassen zugreifen und diese erben können.

Beispiel #1 Eingebaute Ausnahmebehandlungsklasse

<?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(&#39;1 is an invalid parameter&#39;, 5);
    break;
   case self::THROW_DEFAULT:
    // 抛出默认的异常
    throw new Exception(&#39;2 is not allowed as a parameter&#39;, 6);
    break;
   default: 
    // 没有异常的情况下,创建一个对象
    $this->var = $avalue;
    break;
  }
 }
}

Der obige Artikel basiert auf PHP7-Fehlerbehandlungs- und Ausnahmebehandlungsmethoden (ausführliche Erklärung). Ich hoffe, er kann Ihnen eine Referenz geben und ich hoffe, dass Sie die chinesische PHP-Website unterstützen.

Artikel, die Sie interessieren könnten:

Erklärung vordefinierter Variablen für das PHP-Lernen

Erklärung, wie PHP das Start- und Enddatum der Woche eines bestimmten Jahres erhält

Wie man durch die PHP-Schnittstelle Mehrfachvererbung und tarits_php-Kenntnisse einen Mehrfachvererbungseffekt erzielt

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Fehlerbehandlungs- und Ausnahmebehandlungsmethoden basierend auf PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn