PHP ловушка исключений и логика программирования - PullRequest
2 голосов
/ 09 декабря 2011

Я пытаюсь поймать ошибку при создании объекта, потому что этот объект может и должен иногда выдавать ошибку.

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

Я хочу многое сделать с этим новым объектом, но только еслион был создан без исключения.

Проблема в том, что я не хочу делать все эти вещи внутри блока try catch.Как мне это сделать?

Большое спасибо, Майкл

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

Я действительно не вижу причин для того, что вы спрашиваете, но, возможно, лучше всего сделать все остальные функции в функции, которую вы вызываете из блока 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.Таким образом, вы можете проверить переключатель, чтобы увидеть, выполнять ли все остальные вещи.

$mySwitch = true;

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

if($mySwitch){
  // do some stuff here
}
1 голос
/ 09 декабря 2011

Нет никакого смысла делать это снаружи.Также имеет смысл выполнять все ваши действия внутри блока try/catch, чтобы проверить его на наличие ошибок.

Вы должны хранить его внутри блока try/catch, поскольку он именно для этого и предназначен.

0 голосов
/ 09 декабря 2011

Немного странно - но вы можете либо умереть, либо перенаправить ...

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...