本文實例講述了PHP異常處理定義與使用方法。分享給大家供大家參考,具體如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?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(); // 可輸出的字符串 // } ?> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<?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( "修改失敗" ); } } ?> |
異常使用的注意事項 :
通過上面的案例,我們可以看出,使用
1
2
3
4
5
|
try { //代碼 } catch (Exception $e ){ //對異常處理 } |
這種方式,可以更有效的控制錯誤.所以在開發中大量的使用.
1. 當捕獲到一個異常后,try{} 塊里的后續代碼不繼續執行.
2. 如果有一個異常發生,但是你沒有catch 捕獲,則提示一個Uncaught Exception.(系統.)
3. 當catch一個異常,你可以處理,也可以不處理,不處理就可以
throw new Exception("信息");
4. 你可以自定義異常類
1
2
|
class MyException extends Exception { } |
5. 使用多個 catch 代碼塊可以捕獲不同種類的異常
1
2
3
4
5
6
7
8
9
|
try { //代碼.... //第一句話 //第二句話 } catch (PDOException $e ){ // } catch (Exception $e ){ | } |
6. 也可簡單使用 Exception 捕獲
代碼說明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?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 代碼塊中拋出(再次拋出)異常。
簡而言之:如果拋出了異常,就必須捕獲它。或者使用頂級異常處理器處理。
如果不拋,即使有異常也不會捕獲,不會處理
希望本文所述對大家PHP程序設計有所幫助。