PHP語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。下面是小編分享的PHP異常處理定義與使用方法,一起來看一下吧。
<?php
//php5提供了基本的異常處理類,可直接使用 ,不需要自己再定義
// class Exception
// {
// protected $message = 'Unknown exception'; // 異常資訊
// protected $code = 0; // 使用者自定義異常程式碼
// protected $file; // 發生異常的檔名
// protected $line; // 發生異常的程式碼行號
// function __construct($message = null, $code = 0);
// final function getMessage(); // 返回異常資訊
// final function getCode(); // 返回異常程式碼
// final function getFile(); // 返回發生異常的檔名
// final function getLine(); // 返回發生異常的程式碼行號
// final function getTrace(); // backtrace() 陣列
// final function getTraceAsString(); // 已格成化成字串的 getTrace() 資訊
// /* 可過載的方法 */
// function __toString(); // 可輸出的字串
// }
?>
<?php
//定義一個頂級異常處理
function my_exception($e){
echo "我是頂級異常處理".$e->getMessage();
}
//修改預設的頂級異常處理函式(器)
set_exception_handler("my_exception");
//我們使用異常機制
try{
addUser("shunping");
updateUser("xiaoming1");
}
//catch用來 捕獲異常, Exception 是異常類(是php定義好一個類)
catch(Exception $e){
//返回異常資訊
echo "返回異常資訊(失敗資訊) =".$e->getMessage()."<br/>";
echo "返回異常程式碼 =".$e->getCode()."<br/>";
echo "返回發生異常的檔名 =".$e->getFile()."<br/>";
echo "返回發生異常的程式碼行號 =".$e->getLine()."<br/>";
//echo " =".$e->getTrace()."<br/>"; // backtrace() 陣列
//可以繼續丟擲,這時將會啟動php預設的異常處理器來處理
//你也可以自己定義一個頂級異常處理器,對其進行處理
throw $e;
}
function addUser($username){
if($username=="shunping"){
//新增ok
echo "ok1";
}else{
//新增error
//丟擲異常.
throw new Exception("新增失敗");
}
}
function updateUser($username){
if($username=="xiaoming"){
//正常修改
echo "ok2";
}else{
//平丟擲異常
throw new Exception("修改失敗");
}
}
?>
異常使用的注意事項 :
通過上面的案例,我們可以看出,使用
try{
//程式碼
}catch(Exception $e){
//對異常處理
}
這種方式,可以更有效的控制錯誤.所以在開發中大量的使用.
1. 當捕獲到一個異常後,try{} 塊裡的`後續程式碼不繼續執行.
2. 如果有一個異常發生,但是你沒有catch 捕獲,則提示一個Uncaught Exception.(系統.)
3. 當catch一個異常,你可以處理,也可以不處理,不處理就可以
throw new Exception("資訊");
4. 你可以自定義異常類
class MyException extends Exception {
}
5. 使用多個 catch 程式碼塊可以捕獲不同種類的異常
try{
//程式碼....
//第一句話
//第二句話
}catch(PDOException $e){
//
}catch(Exception $e){
|
}
6. 也可簡單使用 Exception 捕獲
程式碼說明:
<?php
//定義了一個異常
class MyException1 extends Exception{
}
class MyException2 extends Exception{
}
function A(){
throw new MyException1("a");
}
function B(){
throw new MyException2("b")
}
function C(){
try{
A();//丟擲MyException1
B();//丟擲MyException2
}catch(Exception1 $e1){
$e1->getMessage();
}catch(Exception2 $e2){
$e2->getMesage();
}
}
?>
異常的規則
需要進行異常處理的程式碼應該放入 try 程式碼塊內,以便捕獲潛在的異常。
每個 try 或 throw 程式碼塊必須至少擁有一個對應的 catch 程式碼塊。
使用多個 catch 程式碼塊可以捕獲不同種類的異常。
可以在 try 程式碼塊內的 catch 程式碼塊中丟擲(再次丟擲)異常。
簡而言之:如果丟擲了異常,就必須捕獲它。或者使用頂級異常處理器處理。
如果不拋,即使有異常也不會捕獲,不會處理