php: try-catch не поймать все исключения

Я пытаюсь сделать следующее:

try { // just an example $time = 'wrong datatype'; $timestamp = date("Ymd H:i:s", $time); } catch (Exception $e) { return false; } // database activity here 

Короче: я инициализирую некоторые переменные, которые нужно поместить в базу данных. Если инициализация завершилась неудачно по какой-либо причине – например, потому что $ time не является ожидаемым форматом – я хочу, чтобы метод возвращал false и не вводил неверные данные в базу данных.

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

Есть ли способ обойти это? Я просто подумал, что было бы проще сделать это, как это, вместо того, чтобы вручную проверять каждую переменную, что кажется неэффективным, учитывая, что в 99% всех случаев ничего плохого не происходит.

Решение №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("Ymd H:i:s", $time)) { throw new Exception('date error'); } } catch (Exception $e) { return false; } 

Чем короче, чем я нашел:

 set_error_handler(function($errno, $errstr, $errfile, $errline ){ throw new ErrorException($errstr, $errno, 0, $errfile, $errline); }); 

Делает все ошибки экземплярами catchable ErrorException