2014-01-16 111 views
0

這裏是我的代碼:嘗試多個catch

error_reporting(0); 

$mysqli=new mysqli("localhost",'root','','alex'); 
try{ 
    if($mysqli->connect_errno){ 
     throw new Exception("Database error!"); 
    }else{ 
     $query=$mysqli->query("Select companie,sum(suma) as suma from muncitori group by companie"); 
     if(!$query){ 
      throw new LastException("Query failed!"); 
     } 
    } 
    while($result=$query->fetch_array()){ 
     echo "Compania $result[companie] a cheltuit suma $result[suma] lei<br>"; 
    } 
}catch (Exception $e){ 
    echo $e->getMessage(); 
}catch (LastException $e){ 
    echo $e->getMessage(); 
} 
class LastException extends Exception{} 

如果我的查詢失敗,我拋出異常,(LastException $ S)catch塊未捕獲異常,但(例外$ E)抓住它。哪裏有問題?爲什麼Exception捕獲ExceptionException異常?

+0

請更改您的問題 – sectus

回答

1

你應該重新排序趕塊:從最具體一般,如:

try { 
    //... 
} catch (LastException $e) { 
    //... 
} catch (Exception $e) { 
    //... 
} 

事項:

  • catch-blocks proc按順序排列:從上到下;
  • 第一個匹配的catch-block將被執行;

因此,如果您先放置} catch (Exception $e),那麼它將捕獲所有異常,因爲Exception是PHP中所有異常的基類。

+0

謝謝你是這個問題! –

0

扭轉這種兩種例外:

} catch (LastException $e) { 
    echo $e->getMessage(); 
} catch (Exception $s) { 
    echo $s->getMessage(); 
} 
+0

感謝您的回答! –