php: try-catch не поймать все исключения
Я пытаюсь сделать следующее:
try {
// just an example
$time = 'wrong datatype';
$timestamp = date("Y-m-d H:i:s", $time);
} catch (Exception $e) {
return false;
}
// database activity here
Короче: я инициализирую некоторые переменные, которые нужно поместить в базу данных. Если инициализация завершилась неудачно по какой-либо причине - например, потому что $ time не является ожидаемым форматом - я хочу, чтобы метод возвращал false и не вводил неверные данные в базу данных.
Однако ошибки, подобные этому, не пойманы "catch" -statement, а глобальным обработчиком ошибок. И затем сценарий продолжается.
Есть ли способ обойти это? Я просто подумал, что было бы проще сделать это, как это, вместо того, чтобы вручную проверять каждую переменную, что кажется неэффективным, учитывая, что в 99% всех случаев ничего плохого не происходит.
Ответы
Ответ 1
Решение №1
Используйте ErrorException, чтобы превращать ошибки в исключения:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
Решение №2
try {
// just an example
$time = 'wrong datatype';
if (false === $timestamp = date("Y-m-d H:i:s", $time)) {
throw new Exception('date error');
}
} catch (Exception $e) {
return false;
}
Ответ 2
Чем короче, чем я нашел:
set_error_handler(function($errno, $errstr, $errfile, $errline ){
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
Делает все ошибки экземплярами catchable ErrorException
Ответ 3
try {
// call a success/error/progress handler
} catch (\Throwable $e) { // For PHP 7
// handle $e
} catch (\Exception $e) { // For PHP 5
// handle $e
}
Ответ 4
catch (Throwable $ e) catch ( Throwable $e){ $msg = $e-> getMessage(); }
catch ( Throwable $e){ $msg = $e-> getMessage(); }