2014-01-16 2 views
0

Вот мой код:попробовать несколько поймать

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) поймать блок не поймать исключение, но и (Exception $ е) поймать его , В чем проблема? Почему исключение исключения исключений включено в исключение LastException?

+0

Пожалуйста, перефразируйте ваш вопрос – sectus

ответ

1

Вы должны REORDER Catch-блоки: от самых конкретного к наиболее общей, например:

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

Что нужно знать:

  • catch-blocks proc последовательно: сверху вниз;
  • будет выполнен первый соответствующий catch-блок;

Так что, если вы размещаете } catch (Exception $e) первыми, то он будет перехватывать все исключения, как Exception является базовым классом для всех исключений в PHP.

+0

Спасибо, что проблема! –

0

Реверс эти 2 исключения:

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

Спасибо за ответ! –

Смежные вопросы