在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