2014-01-16 36 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

感谢您的回答! –