php: try-catch not catching all exceptions
try {
// call a success/error/progress handler
} catch (\Throwable $e) { // For PHP 7
// handle $e
} catch (\Exception $e) { // For PHP 5
// handle $e
}
Solution #1
Use ErrorException to turn errors into exceptions to handle:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
Solution #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;
}
The shorter that I have found:
set_error_handler(function($errno, $errstr, $errfile, $errline ){
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
Makes all errors becoming instance of catchable ErrorException
It is possible to use catch(Throwable $e)
to catch all exceptions and errors like so:
catch ( Throwable $e){
$msg = $e->getMessage();
}