異常處理
拋出和捕獲異常
try 功能檢查異常
catch 捕獲異常
throw 拋出異常
try{
...
throw new Exception($errmsg,$errcode)
}catch(Exception $e){
...
}
try之後至少要有一個catch,成對出現
基本異常類
Exception
1.接受兩個參數 錯誤信息和錯誤代碼
2.內置方法
getMessage 返回傳遞給構造函數的方法
getCode 返回傳遞給構造函數的代碼
getFile 返回發生異常的代碼文件路徑
getLine 返回代碼行號
__tostring 輸出所有異常信息
3.擴展基本異常類 繼承Exception
<?php
try {
$num = 0;
if($num == 0){
$errmsg = "除數不能爲0";
throw new newException($num);
}else {
echo 500/$num;
}
} catch (newException $e) {
$e->errMessage();
}
class newException extends Exception{
function errMessage(){
echo "錯誤信息:"."除數".$this->getMessage()."不能爲零<br>";
echo "錯誤文件:".$this->getFile()."<br>";
echo "錯誤行:".$this->getLine();
}
}
?>
4.捕獲多個異常
使用if和else或者swith
捕獲異常是往往仍然需要捕獲Exception類,來處理捕獲的異常
從上往下的順序,如果先捕獲Exception類導致不能被正確的代碼執行,特定的異常寫在前面,一般異常的catch寫在後面
示例:
class customException extends Exception{
public function errMessage(){
$errMsg = "錯誤信息:".$this->getMessage()."<br>";
$errMsg.="錯誤文件路徑:".$this->getFile()."<br>";
$errMsg.="錯誤代碼行號:".$this->getLine();
return $errMsg;
}
}
$email = "[email protected]";
try {
if(filter_var($email,FILTER_VALIDATE_EMAIL)==FALSE){
throw new customException("<b>".$email."</b>錯誤的郵箱地址");
}
if(strpos($email,"example")!=FALSE){
throw new customException("<b>".$email."</b>是一個example電子郵件地址");
}
}catch (customException $e){
echo $e->errMessage();
}
catch (Exception $e) {
echo $e->getMessage();
}
拋出和捕獲異常
try 功能檢查異常
catch 捕獲異常
throw 拋出異常
try{
...
throw new Exception($errmsg,$errcode)
}catch(Exception $e){
...
}
try之後至少要有一個catch,成對出現
基本異常類
Exception
1.接受兩個參數 錯誤信息和錯誤代碼
2.內置方法
getMessage 返回傳遞給構造函數的方法
getCode 返回傳遞給構造函數的代碼
getFile 返回發生異常的代碼文件路徑
getLine 返回代碼行號
__tostring 輸出所有異常信息
3.擴展基本異常類 繼承Exception
<?php
try {
$num = 0;
if($num == 0){
$errmsg = "除數不能爲0";
throw new newException($num);
}else {
echo 500/$num;
}
} catch (newException $e) {
$e->errMessage();
}
class newException extends Exception{
function errMessage(){
echo "錯誤信息:"."除數".$this->getMessage()."不能爲零<br>";
echo "錯誤文件:".$this->getFile()."<br>";
echo "錯誤行:".$this->getLine();
}
}
?>
4.捕獲多個異常
使用if和else或者swith
捕獲異常是往往仍然需要捕獲Exception類,來處理捕獲的異常
從上往下的順序,如果先捕獲Exception類導致不能被正確的代碼執行,特定的異常寫在前面,一般異常的catch寫在後面
示例:
class customException extends Exception{
public function errMessage(){
$errMsg = "錯誤信息:".$this->getMessage()."<br>";
$errMsg.="錯誤文件路徑:".$this->getFile()."<br>";
$errMsg.="錯誤代碼行號:".$this->getLine();
return $errMsg;
}
}
$email = "[email protected]";
try {
if(filter_var($email,FILTER_VALIDATE_EMAIL)==FALSE){
throw new customException("<b>".$email."</b>錯誤的郵箱地址");
}
if(strpos($email,"example")!=FALSE){
throw new customException("<b>".$email."</b>是一個example電子郵件地址");
}
}catch (customException $e){
echo $e->errMessage();
}
catch (Exception $e) {
echo $e->getMessage();
}