【问题标题】:How to end stack execution at once (PHP)? [closed]如何一次结束堆栈执行(PHP)? [关闭]
【发布时间】:2012-09-06 14:06:18
【问题描述】:

我得到了一个产生错误概率为 50:50 的代码。这一切都在一个类对象中完成。对象中的任何方法都可能产生错误。我怎样才能使方法堆栈深处的某个函数产生错误,以便可以将其返回给第一个运行的函数?

像这样: 1.调用函数1 2.function1调用function2 3.function2调用function3 4. function3 产生错误并传递数组 函数1的错误定义权

我知道异常是正确的(用 try-catch 块包裹函数),但我还不能让它在 3 个函数深堆栈中捕获异常。我该怎么做?

【问题讨论】:

  • 异常确实是您想要的,它们适用于任意数量的级别。向我们展示您的代码,以便我们告诉您为什么它不适合您。
  • 把异常抛到更深的地方并在更高的层次上捕获它。你没有从中得到什么?
  • 官方手册也有一些示例,您可能想查看:php.net/manual/en/language.exceptions.php

标签: php class exception


【解决方案1】:

你试过什么?真的很简单:

<?php

function function1( ) {
    try {
        function2( );
    }
    catch( Exception $e ) {
        // Exception from function4 bubbles up.
    }
}

function function2( ) {
    function3( );
}

function function3( ) {
    function4( );
}

function function4( ) {
    throw new Exception( );
}

【讨论】:

  • 这将在我的机器上调用一个“未捕获的异常”
  • 哎呀,突然开始工作,不知道我做错了什么:D
【解决方案2】:

只需在应该捕获异常的级别使用try 并保持其他不变。 例如:

try{
function1();
}
catch(Exception e){
// bla bla
}

如前所述,异常会传播,直到它们被捕获或崩溃:)。

【讨论】:

  • 你为什么要这样做?无论如何,例外都会冒出来。根本不需要这样做。
  • 太痛苦了,不过我会考虑用这个
  • 认为它很容易理解(因为操作写了“类项目”)。他可以在他想要捕获异常的级别使用它。
【解决方案3】:

例外是正确的做法。 Catch Exception(普通类)是一种不好的做法。

您应该抛出具体/自定义异常。

查看 http://php.net/manual/en/spl.exceptions.php 并更改您的 throw 并添加更具体和具体的例外

避免

 throw new Exception('foo');

相反

 throw new RuntimeException('foo');

【讨论】:

  • 边界“不是答案”我会说,因为它是在呼应 OP 已经知道的内容
  • 有时直接回答不是解决方案。在这种情况下,他的问题是缺乏设计。
  • 我发现真的真的很难通过查看 OP 的问题来判断。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 2013-12-22
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2011-04-24
  • 2021-08-17
相关资源
最近更新 更多