У меня есть следующий код 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);
}
Когда этот код вызывается для идентификатора записи базы данных, который не существует, я получаю фатальную необработанную ошибку исключения «Исключение».
Почему это? Очевидно, я ловлю исключение ... Что я делаю не так?
Я уверен, что исключение выдается. Что-то не так с тем, как я обрабатываю исключение - может быть, с продолжением?
EDIT
Благодаря помощи джиттера следующий обходной путь решает эту проблему:
if (!$Object->propertyIsTrue()) {
// Workaround to eAccelerator bug 291 (http://eaccelerator.net/ticket/291).
$foo = 555;
continue;
}