Слишком много блоков try / catch для PDO - PullRequest
0 голосов
/ 01 октября 2011

В файлах классов контроллеров большинство функций метода включают блок try / catch что-то вроде этого:

 try
   {
      $stmt = $this->prepare($sql);
      $stmt->execute($params);
      $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
      //foreach() or so on...
   }
   catch (Exception $e)
   {
      //bunch of code...
      //save error into database, etc.
      //error into json and pass to view file
   }

В блоке catch много кода, есть ли способ уменьшить его. Можно ли добавить «исключение выброса» в блоке catch?

Ответы [ 3 ]

3 голосов
/ 01 октября 2011

Да, это так. Попробуйте сами. Вы всегда можете добавить новое исключение в блоке перехвата или выбросить то же исключение.

try
   {
      // ...
   }
   catch (Exception $e)
   {
      // do whatever you want
      throw new Your_Exception($e->getMessage());
      // or
      throw $e;
   }
0 голосов
/ 01 октября 2011

Вы не должны ловить Exception. Это слишком общее. Поймайте каждый конкретный тип исключения с помощью нескольких операторов catch в вашем блоке try:

try {


} catch(PDOException $err) {

} catch(DomainException $err) {

} 
0 голосов
/ 01 октября 2011

Я не знаю, что такое «связка кода». Я не уверен, что верю тебе. Если у вас столько всего происходит в блоке уловов, вы делаете что-то не так.

Я бы поместил этот вид кода в аспект, если у вас есть доступный AOP.

«Ошибка в базе данных» может выдать свое собственное исключение. Что с этим происходит?

Единственный шаг, который я вижу здесь, это необходимый, это маршрутизация к просмотру ошибок.

Что делает отбрасывание исключения? Это просто передача денег в другом месте. Если все эти шаги не нужно делать, и все, что вы делаете, чтобы сбросить, тогда не поймайте это вообще. Пусть исключение всплывет там, где оно действительно обработано.

...