PHP异常捕获和编程逻辑

时间:2011-12-09 12:16:05

标签: php exception logic

我正在尝试捕获对象创建时的错误,因为此对象可以而且有时会抛出错误。

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

我想用这个新对象做很多事情,但只有在创建时没有抛出异常。

问题是我不希望在try catch块中执行所有这些操作。我该如何做到这一点?

非常感谢 迈克尔

3 个答案:

答案 0 :(得分:4)

我真的看不出你要问的任何理由,但也许最好的办法是在你从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块之前设置一个开关,然后在catch块中将它设置为off。这样你就可以测试开关,看看是否要执行所有其他的东西。

$mySwitch = true;

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

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

答案 1 :(得分:1)

在外面做这件事毫无意义。在try/catch块中执行所有操作以测试错误是更有意义的。

您应该将其保留在try/catch块内,因为它正是它的设计目标。

答案 2 :(得分:0)

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

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包裹在一个试试......块中可能仍然更有意义。