選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

PHP 教程

PHP HOME PHP 簡介 PHP 安裝 PHP 語法 PHP 註釋 PHP 變數 PHP Echo / Print PHP 資料型別 PHP 字串 PHP 數字 PHP 型別轉換 PHP 數學 PHP 常量 PHP 魔術常量 PHP 運算子 PHP If...Else...Elseif PHP Switch PHP 迴圈 PHP 函式 PHP 陣列 PHP 超全域性變數 PHP 正則表示式

PHP 表單

PHP 表單處理 PHP 表單驗證 PHP 表單必填項 PHP 表單 URL/電子郵件 PHP 表單完成

PHP 高階

PHP 日期和時間 PHP Include PHP 檔案處理 PHP 檔案開啟/讀取 PHP 檔案建立/寫入 PHP 檔案上傳 PHP Cookies PHP Sessions PHP 過濾器 PHP 高階過濾器 PHP 回撥函式 PHP JSON PHP 異常

PHP OOP

PHP 什麼是 OOP PHP 類/物件 PHP 建構函式 PHP 解構函式 PHP 訪問修飾符 PHP 繼承 PHP 常量 PHP 抽象類 PHP 介面 PHP Trait PHP 靜態方法 PHP 靜態屬性 PHP 名稱空間 PHP 可迭代物件

MySQL 資料庫

MySQL 資料庫 MySQL 連線 MySQL 建立資料庫 MySQL 建立表 MySQL 插入資料 MySQL 獲取最後 ID MySQL 插入多條資料 MySQL 預處理 MySQL 查詢資料 MySQL Where MySQL Order By MySQL 刪除資料 MySQL 更新資料 MySQL 限制資料

PHP XML

PHP XML 解析器 PHP SimpleXML 解析器 PHP SimpleXML - 獲取 PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX 簡介 AJAX PHP AJAX 資料庫 AJAX XML AJAX 即時搜尋 AJAX 投票

PHP 示例

PHP 示例 PHP 編譯器 PHP 測驗 PHP 練習 PHP 伺服器 PHP 證書

PHP 參考手冊

PHP 概述 PHP 陣列 PHP 日曆 PHP 日期 PHP 目錄 PHP 錯誤 PHP 異常 PHP 檔案系統 PHP 過濾器 PHP FTP PHP JSON PHP 關鍵詞 PHP Libxml PHP 郵件 PHP 數學 PHP 雜項 PHP MySQLi PHP 網路 PHP 輸出控制 PHP 正則表示式 PHP SimpleXML PHP Stream PHP String PHP 變數處理 PHP XML 解析器 PHP 壓縮 PHP 時區

PHP 異常


什麼是異常?

異常是一個描述 PHP 指令碼錯誤或意外行為的物件。

許多 PHP 函式和類都會丟擲異常。

使用者定義的函式和類也可以丟擲異常。

當函式遇到無法使用的資料時,丟擲異常是停止該函式的好方法。


丟擲異常

throw 語句允許使用者定義的函式或方法丟擲異常。當丟擲異常時,它後面的程式碼將不會執行。

如果異常未被捕獲,將會發生一個致命錯誤,並顯示“未捕獲的異常”訊息。

讓我們嘗試在不捕獲異常的情況下丟擲它

示例

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

echo divide(5, 0);
?>
自己動手試一試 »

結果將類似於:

致命錯誤: 未捕獲的異常: C:\webfolder\test.php:4 中的零除法
堆疊跟蹤: #0 C:\webfolder\test.php(9)
divide(5, 0) #1 {main} 在 C:\webfolder\test.php 的第 4 行丟擲

try...catch 語句

為了避免上面示例中的錯誤,我們可以使用 try...catch 語句來捕獲異常並繼續執行。

語法

try {
  可能丟擲異常的程式碼
} catch(Exception $e) {
  捕獲到異常時執行的程式碼
}

示例

丟擲異常時顯示訊息

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "無法除法。";
}
?>
自己動手試一試 »

catch 塊指示應該捕獲哪種型別的異常,以及用於訪問該異常的變數名。在上面的示例中,異常型別是 Exception,變數名是 $e



try...catch...finally 語句

可以使用 try...catch...finally 語句來捕獲異常。無論是否捕獲到異常,finally 塊中的程式碼都將始終執行。如果存在 finally,則 catch 塊是可選的。

語法

try {
  可能丟擲異常的程式碼
} catch(Exception $e) {
  捕獲到異常時執行的程式碼
} finally {
  無論是否捕獲到異常,始終執行的程式碼
}

示例

丟擲異常時顯示訊息,然後指示程序已結束

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $e) {
  echo "無法除法。 ";
} finally {
  echo "程序完成。";
}
?>
自己動手試一試 »

示例

即使未捕獲到異常,也輸出字串

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} finally {
  echo "程序完成。";
}
?>
自己動手試一試 »

異常物件

異常物件包含有關函式遇到的錯誤或意外行為的資訊。

語法

new Exception(message, code, previous)

引數值

引數 描述
message 可選。一個描述異常丟擲原因的字串
程式碼 可選。一個整數,可用於輕鬆區分相同型別的其他異常
previous 可選。如果此異常是在另一個異常的 catch 塊中丟擲的,則建議將該異常傳遞到此引數

方法

捕獲異常時,下表顯示了一些可用於獲取有關異常的資訊的方法

方法 描述
getMessage() 返回一個描述異常丟擲原因的字串
getPrevious() 如果此異常是由另一個異常觸發的,則此方法返回前一個異常。如果不是,則返回 null
getCode() 返回異常程式碼
getFile() 返回丟擲異常的檔案的完整路徑
getLine() 返回丟擲異常的程式碼行的行號

示例

輸出已丟擲異常的資訊

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero", 1);
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} catch(Exception $ex) {
  $code = $ex->getCode();
  $message = $ex->getMessage();
  $file = $ex->getFile();
  $line = $ex->getLine();
  echo "Exception thrown in $file on line $line: [Code $code]
  $message";
}
?>
自己動手試一試 »

完整的異常參考

有關完整參考,請訪問我們的 完整的 PHP 異常參考

參考包含所有異常方法的描述和示例。



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援