Исключение прекращает программу?

0

Учитывая следующий код, выполняемый cron:

try {
    $count = $stmt->execute ( $queryArray );
}
catch ( PDOException $ex ) {
    fwrite ( $fp, '  "exception" at line: ' . (__LINE__ - 3). ",  " . $ex -> getMessage () . "\n" );
    throw new RuntimeException (
         basename (__FILE__) . '::' . __METHOD__ . ' - Execute query failed: ' . $ex -> getMessage ()  );
}

throw new RuntimeException заставляя программу останавливаться? Другими словами, оператор catch & fwrite достаточно "поймает" исключение и позволит программе продолжить?

throw нечеткая. Единственная ссылка на PHP Fatal Error (ссылка на) Исключения PHP:

Когда генерируется исключение, код, следующий за оператором, не будет выполнен, а PHP попытается найти первый соответствующий блок catch. Если исключение не было обнаружено, Fatal Error будет выдаваться с сообщением "Невыключиться...", если обработчик не был определен с помощью set_exception_handler().

Теги:
exception

1 ответ

0
Лучший ответ

Перебрасывает ли новое RuntimeException, заставляя программу останавливаться?

Да, потому что в документации нет соответствующего улова. Чтобы продолжить выполнение, вам нужно будет catch второе исключение (RuntimeException), используя вложенный try/catch который обычно не является отличной идеей:

try {
   // something with PDO that generates an exception
} catch (PDOException $e) {
   // do some stuff
   try {
       throw new RuntimeException();
   } catch (RuntimeException()) {
     // do something else
   }
}

Другими словами, оператор catch & fwrite достаточно "поймает" исключение и позволит программе продолжить?

Если вы хотите продолжить работу с программой, вам не нужно бросать второе исключение. Однако все, что произошло до того, как вы выбросите это исключение, произойдет. Таким образом, в вашем примере fwrite все равно произойдет, программа будет остановлена только при обнаружении RuntimeException.

  • 0
    Что вы подразумеваете под: «Однако произойдет то, что произошло до того, как вы выбросите это исключение. Так что в вашем примере frwite все еще будет происходить ... »(опечатки?) Я надеялся, что это предложение прояснит ситуацию для меня.
  • 0
    Да .. опечатка s/and thing/anything - исправлено в ответе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню