使用try{thow}catch(){}異常處理結構,可以有效的控制多行可能發生異常的代碼,基本模型如下:
<?php
try
{
throw new Exception("錯誤信息";) //拋出一個錯誤
}
catch(Exception $e) //捕獲錯誤信息,Exception是一個內置的錯誤處理類
{
echo $e->getMessage(); //輸出錯誤信息
echo $e->getCode(); //返回異常代碼
echo $e->getFile(); //返回發生異常的文件
echo $e->getLine(); //返回發生異常的行號
}
?>
Exception原形:
<?php
class Exception
{
protected $message = 'Unknown exception'; // 異常信息
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() 信息
public function __toString(); // 可輸出的字符串
}
?>
同時,一個try也可以關聯多個catch塊,可以自定義類繼承Exception類來實現
<?php
class myException1 extends Exception{} //根據需要自定義
class myException2 extends Exception{}
class myException3 extends Exception{}
try{
switch(1){
case 1:throw new myException1();
case 2:throw new myException2();
case 3:throw new myException3(); //當找不到對應的catch代碼塊時,將會拋到Exception處理,因為myException3繼承了Exception
}
}
catch(myException1 $e){
echo "自定義錯誤1";
}
catch(myException2 $e){
echo "自定義錯誤2";
}
catch(Exception $e){
echo "原始異常類";
}
?>