Учитывая следующий код, выполняемый 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().
Перебрасывает ли новое 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
.
s/and thing/anything
- исправлено в ответе.