主頁(yè) > 知識(shí)庫(kù) > 基于PHP7錯(cuò)誤處理與異常處理方法(詳解)

基于PHP7錯(cuò)誤處理與異常處理方法(詳解)

熱門(mén)標(biāo)簽:離石地圖標(biāo)注 400電話(huà)申請(qǐng)方法收費(fèi) 專(zhuān)業(yè)電話(huà)機(jī)器人批發(fā)商 400電話(huà)辦理福州市 長(zhǎng)沙crm外呼系統(tǒng)業(yè)務(wù) 江蘇外呼電銷(xiāo)機(jī)器人報(bào)價(jià) 電話(huà)機(jī)器人危險(xiǎn)嗎 深圳外呼系統(tǒng)收費(fèi) 南寧高頻外呼回?fù)芟到y(tǒng)哪家好

PHP7錯(cuò)誤處理

PHP 7 改變了大多數(shù)錯(cuò)誤的報(bào)告方式。不同于傳統(tǒng)(PHP 5)的錯(cuò)誤報(bào)告機(jī)制,現(xiàn)在大多數(shù)錯(cuò)誤被作為 Error 異常拋出。

這種 Error 異??梢韵?Exception 異常一樣被第一個(gè)匹配的 try / catch 塊所捕獲。如果沒(méi)有匹配的 catch 塊,則調(diào)用異常處理函數(shù)(事先通過(guò) set_exception_handler() 注冊(cè))進(jìn)行處理。 如果尚未注冊(cè)異常處理函數(shù),則按照傳統(tǒng)方式處理:被報(bào)告為一個(gè)致命錯(cuò)誤(Fatal Error)。

Error 類(lèi)并非繼承自 Exception 類(lèi),所以不能用 catch (Exception e)...來(lái)捕獲Error。你可以用catch(Errore) { … },或者通過(guò)注冊(cè)異常處理函數(shù)( set_exception_handler())來(lái)捕獲 Error。

Error 層次結(jié)構(gòu)

Throwable
 Error
  ArithmeticError
   DivisionByZeroError
  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
}

擴(kuò)展(extend) PHP內(nèi)置的異常處理類(lèi)

用戶(hù)可以用自定義的異常處理類(lèi)來(lái)擴(kuò)展PHP內(nèi)置的異常處理類(lèi)。以下的代碼說(shuō)明了在內(nèi)置的異常處理類(lèi)中,哪些屬性和方法在子類(lèi)中是可訪問(wèn)和繼承的。

Example #1 內(nèi)置的異常處理類(lèi)

?php
class Exception
{
 protected $message = 'Unknown exception'; // 異常信息
 private $string;       // __toString cache
 protected $code = 0;      // 用戶(hù)自定義異常代碼
 protected $file;       // 發(fā)生異常的文件名
 protected $line;       // 發(fā)生異常的代碼行號(hào)
 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();   // 返回發(fā)生異常的文件名
 final public function getLine();   // 返回發(fā)生異常的代碼行號(hào)
 final public function getTrace();   // backtrace() 數(shù)組
 final public function getPrevious();  // 之前的 exception
 final public function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息
 // Overrideable
 public function __toString();    // 可輸出的字符串
}
?>
如果使用自定義的類(lèi)來(lái)擴(kuò)展內(nèi)置異常處理類(lèi),并且要重新定義構(gòu)造函數(shù)的話(huà),建議同時(shí)調(diào)用 parent::__construct() 來(lái)檢查所有的變量是否已被賦值。當(dāng)對(duì)象要輸出字符串的時(shí)候,可以重載 __toString() 并自定義輸出的樣式。
 Note:
 Exception 對(duì)象不能被復(fù)制。嘗試對(duì) Exception 對(duì)象復(fù)制 會(huì)導(dǎo)致一個(gè) E_ERROR 級(jí)別的錯(cuò)誤。 
?php
/**
 * 自定義一個(gè)異常處理類(lèi)
 */
class MyException extends Exception
{
 // 重定義構(gòu)造器使 message 變?yōu)楸仨毐恢付ǖ膶傩?
 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";
 }
}

/**
 * 創(chuàng)建一個(gè)用于測(cè)試異常處理機(jī)制的類(lèi)
 */
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:
    // 拋出默認(rèn)的異常
    throw new Exception('2 is not allowed as a parameter', 6);
    break;
   default: 
    // 沒(méi)有異常的情況下,創(chuàng)建一個(gè)對(duì)象
    $this->var = $avalue;
    break;
  }
 }
}

以上這篇基于PHP7錯(cuò)誤處理與異常處理方法(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 解決thinkphp5未定義變量會(huì)拋出異常,頁(yè)面錯(cuò)誤,請(qǐng)稍后再試的問(wèn)題
  • php異常處理捕獲錯(cuò)誤整理
  • laravel 5異常錯(cuò)誤:FatalErrorException in Handler.php line 38的解決
  • PHP中常見(jiàn)的錯(cuò)誤與異常處理總結(jié)大全
  • php中的異常和錯(cuò)誤淺析
  • 淺談PHP中的錯(cuò)誤處理和異常處理
  • PHP錯(cuò)誤和異常處理功能模塊示例
  • PHP中錯(cuò)誤與異常的日志記錄用法分析
  • PHP中的錯(cuò)誤及其處理機(jī)制

標(biāo)簽:南昌 濱州 南京 曲靖 太原 白酒營(yíng)銷(xiāo) 興安盟 株洲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于PHP7錯(cuò)誤處理與異常處理方法(詳解)》,本文關(guān)鍵詞  基于,PHP7,錯(cuò)誤,處理,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于PHP7錯(cuò)誤處理與異常處理方法(詳解)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于基于PHP7錯(cuò)誤處理與異常處理方法(詳解)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章