gpt4 book ai didi

php - 在 PHP 中重新抛出异常是否会破坏堆栈跟踪?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:59 24 4
gpt4 key购买 nike

在 C# 中,执行以下操作会破坏异常的堆栈跟踪:

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;
}

最佳答案

当你像以前那样在 PHP 中抛出 $e 时,你重新抛出现有异常对象而不更改其任何内容并发送所有给定信息,包括捕获异常的堆栈跟踪 - 所以你的第二个示例是重新抛出异常的正确方法在 PHP 中。

如果(出于任何原因)你想用最后一条消息抛出新的位置,你必须重新抛出一个新创建的异常对象:

throw new RuntimeException( $e->getMessage() );

请注意,这不仅会丢失堆栈跟踪,还会丢失异常对象中可能包含的除消息之外的所有其他信息(例如 CodeFileRuntimeExceptionLine)。所以这通常不推荐!

关于php - 在 PHP 中重新抛出异常是否会破坏堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com