在C#,執行以下操作會破壞異常的堆棧跟蹤:在PHP中重新拋出異常是否破壞堆棧跟蹤?
try{
throw new RuntimeException();
}
catch(Exception e){
//Log error
//Re-throw
throw e;
}
正因爲如此,使用throw
而非throw e
是優選的。這會讓相同的異常向上傳播,而不是將其包裝在一個新的異常中。
但是,使用throw;
而未指定異常對象在PHP中是無效的語法。這個問題在PHP中不存在嗎?如下使用throw $ e不會破壞堆棧跟蹤?
<?php
try{
throw new RuntimeException();
}
catch(Exception $e){
//Log error
//Re-throw
throw $e;
}
爲什麼要拋出一個新的異常與舊的異常的消息,而不是再次拋出舊的異常?這種方法背後的邏輯是什麼?在這種情況下,你應該使用異常鏈接。 – Dragos