【问题标题】:PHP exception catching and programming logicPHP异常捕获和编程逻辑
【发布时间】:2011-12-09 12:16:04
【问题描述】:

我试图在对象创建时捕获错误,因为该对象有时可以而且应该抛出错误。

try {
    $obj = new MyObject();
} catch (Exception $e) {
    echo 'Caught exception: ';
}

我想对这个新对象做很多事情,但前提是它是在没有引发异常的情况下创建的。

问题是我不想在 try catch 块中做所有这些事情。我将如何做到这一点?

非常感谢 迈克尔

【问题讨论】:

  • 为什么要在 try/catch 之外处理这个问题?这正是它的设计目的......
  • 可以在 catch 块中尝试return false 吗?这样,如果对象存在,您可以继续进行,而不必将所有代码嵌套在 try 中。如果对象不存在,调用该代码的函数将返回 false。

标签: php exception logic


【解决方案1】:

我真的看不出你所问的任何理由,但也许最好的办法是在你从 try/catch 块调用的函数中完成所有其他事情......

function allMyStuff($obj){
  // do some stuff to $obj here
}

try {
  $obj = new MyObject();
  allMyStuff($obj);
} catch (Exception $e) {
  echo 'Caught exception: ';
}

否则,按照您的要求,您可以在 try/catch 块之前将开关设置为 on,然后在 catch 块中将其设置为 off。这样您就可以测试开关以查看是否执行所有其他操作。

$mySwitch = true;

try {
  $obj = new MyObject();
} catch (Exception $e) {
  echo 'Caught exception: ';
  $mySwitch = false;
}

if($mySwitch){
  // do some stuff here
}

【讨论】:

  • 您首选哪种方法,为什么?或者……你为什么要首先避免 try/catch 块……?
  • 第二个选项是我的首选方法。如果可以避免 try catch,那就更好了。
【解决方案2】:

在外面做是没有意义的。在 try/catch 块内执行所有操作以测试它是否有错误也更有意义。

您应该将它保存在 try/catch 块中,因为它正是它的设计目的。

【讨论】:

    【解决方案3】:

    有点奇怪 - 但你可能会死或重定向......

    try {
        $obj = new MyObject();
    } catch (Exception $e) {
        die("Caught exception: {$e->getMessage()}");
    }
    
    //program continues as it hasn't "died"
    

    或者...

    try {
        $obj = new MyObject();
    } catch (Exception $e) {
        header("Location:/exceptionHandler.php?e=" . rawurlencode(serialize($e)));
        die();
    }
    
    //program continues as it's not been redirected or "died"
    

    ...尽管正如其他人所说 - 将整个 kaboodle 包装在 try ... catch 块中可能仍然更有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2017-03-27
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2014-05-11
      • 2019-02-15
      相关资源
      最近更新 更多