我有以下PHP代码:
foreach (...) {
try {
$Object = MyDataMapper::getById(123);
if (!$Object->propertyIsTrue()) {
continue;
}
}
catch (Exception $e) {
continue;
}
}
如果找不到数据库记录,MyDataMapper :: getById()将抛出异常。以下是该方法的定义:
public static function getById($id) {
$query = "SELECT * FROM table WHERE id = $id";
$Connection = Database::getInstance();
$Statement = $Connection->prepare($query);
$Statement->execute();
if ($Statement->rowCount() == 0) {
throw new Exception("Record does not exist!");
return null;
}
$row = $Statement->fetch();
return self::create($row);
}
当为不存在的数据库记录id调用此代码时,我会收到致命的未捕获异常“异常”错误。
这是为什么?显然我正在抓住异常......我做错了什么?
我确信会抛出异常。我如何处理异常是否有问题 - 可能是继续?
修改的
感谢抖动的帮助,以下解决方法解决了这个问题:
if (!$Object->propertyIsTrue()) {
// Workaround to eAccelerator bug 291 (http://eaccelerator.net/ticket/291).
$foo = 555;
continue;
}
答案 0 :(得分:2)
PHP版本是什么? - > 5.2.9
您使用的是eAccelerator(哪个版本)? - > 0.9.5.3 with ionCube PHP Loader v3.1.34
你抛出什么样的例外? - > 正常异常
某些PHP + eAccelerator版本中存在已知问题,这些问题与优化后的try-catch块有关。
检查eAccelerator错误跟踪器:
首发检查门票
291 Incorrect handling of exception
并尝试禁用eAccelerator。
答案 1 :(得分:0)
我认为这可能是因为你正在调用静态方法,但我可能错了。您是否可以通过实例化MyDataMapper并从对象本身调用方法来测试它?