我有一个try-catch块,它遍历一组记录,如下所示:
try {
foreach ( $json['location'] as $records ) {
$location = DnaExtractionTable::getInstance()->find($records['id']);
$location->setName($records['name']);
$location->setLatitude($records['latitude']);
$location->setLongitude($records['longitude']);
$location->setCountryId($records['country_id']);
$location->setRegionId($records['region_id']);
$location->setIslandId($records['island_id']);
$location->setRemarks($records['remarks']);
$location->save();
}
}
catch (Exception $e) {
...
}
我可以捕获抛出的每个异常并继续没有问题。但我也试图“抓住”错误,例如当$records
数组中不存在索引时。
有可能吗?我怎么能这样做?我一直在玩set_X_handler
功能但没有成功。
更新1:
根据评论和答案的建议,我决定实施全局错误功能:
function exceptions_error_handler($severity, $message, $filename, $lineno) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
}
set_error_handler('exceptions_error_handler');
但即使我试图强制错误,代码也不会执行。由于我正在使用Symfony开发,是否有地方可以声明该功能?可能是Symfony禁用或影响set_error_handler
功能吗?
更新2:
Symfony肯定在搞乱我的错误和异常处理程序。
打开调试模式似乎会激活一个覆盖错误报告的Symfony自定义异常处理程序。
虽然我的try-catch
块配置为捕获常规Exception
对象,但关闭调试模式似乎绕过了某些异常。真的很奇怪。
谢谢!