Всем привет. Нужен совет по реализации очереди обработчиков, нужно сделать "красивую" управляющую структуру. Сейчас это выглядит так (пседокод) Код (PHP): <?php public function getResult($data) { try { $decoded1 = обработчик1->decode($data); $decoded2 = обработчик2->decode($decoded1); $response = $mainОбработчик->process($decoded2); $encoded1 = обработчик2->encode($response); $encoded2 = обработчик1->encode($encoded1); return $encoded2; } catch (ИсключениеПервогоОбработчика $e1) { Действия одного типа return $e1->getMessage(); } catch (ИсключениеВторогоОбработчика) { Действия другого типа } catch (Exception) { Действия третьего типа throw new ApplicationException(); } } И всё бы ничего, вот только управление работой программы через исключения кажутся мне бредом. Может кто сталкивался с похожей проблемой?
Почему одного блока try|catch не хватает? Написал в него все, что может отвалиться, внизу обрабатываешь. Трудно представляется пример, где такой функционал на подобии твоего может потребоваться.
Например так Код (Text): <?php function f1($data) { //return false; return $data + 1; } function f2($data) { //return false; return $data + 1; } function f3($data) { return false; // типа тут ошибка return $data + 1; } function getResult($data) { $ar = array(); $ar['Ошибка 1'] = 'f1'; $ar['Ошибка 2'] = 'f2'; $ar['Ошибка 3'] = 'f3'; foreach ($ar as $er => $val) { if (!($data = $val($data))) return $er; } return $data; } $res = getResult(1); var_dump($res);
Апельсин, там и так один try и несколько catch Потому что в зависимости от типа исключения нужны разные действия. Мне это кажется более удобным, чем опираться допустим на код ошибки. Добавлено спустя 10 минут 10 секунд: Easy Идею я понял, подумаю в эту сторону. Спасибо.