Почему я получаю ошибку «Uncaught исключения»? - PullRequest
2 голосов
/ 13 октября 2009

У меня есть следующий код 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;
}

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Какая версия PHP? -> 5.2.9

Используете ли вы eAccelerator (какая версия)? -> 0.9.5.3 с PHP загрузчиком ionCube v3.1.34

Какое исключение вы бросаете? -> нормальное исключение


В некоторых версиях PHP + eAccelerator существуют известные проблемы, связанные с оптимизацией блоков try-catch.

Проверьте систему отслеживания ошибок eAccelerator:

Для начала проверьте билеты

291 Неправильная обработка исключения

314 Исключения не отслеживаются

317 Исключение не обнаружено

и попробуйте отключить eAccelerator.

0 голосов
/ 13 октября 2009

Я думаю, это может быть потому, что вы вызываете статический метод, но я могу ошибаться. Можно ли проверить это, создав экземпляр MyDataMapper и вызвав метод из самого объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...