是否有可能捕获Symfony中不例外的错误?

时间:2011-10-10 12:26:21

标签: php exception error-handling symfony-1.4

我有一个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对象,但关闭调试模式似乎绕过了某些异常。真的很奇怪。

谢谢!

1 个答案:

答案 0 :(得分:3)

请参阅 Handling errors as exceptions. Best methods? 的答案,了解在引发错误时抛出异常的方法。