Я пытаюсь сделать следующее:
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% всех случаев ничего плохого не происходит.
Используйте ErrorException, чтобы превращать ошибки в исключения:
function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, $errno, 0, $errfile, $errline); } set_error_handler("exception_error_handler");
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