PHP - Преобразовывающий все Ошибки в Исключения - Хороший или Плохой?

Я написал такой парсер с некоторыми базовыми приемами, такими как Infix -> RPN и Shunting Yard и Обходы деревьев . Вот реализация, которую я придумал .
Он написан на C ++ и компилируется как в Linux, так и в Windows.
Любые предложения / вопросы приветствуются.

Итак, давайте попробуем решить проблему всеми тремя способами. Как перейти от арифметического выражения (например, в строке), такого как "2 + (2)", к дереву выражений с использованием каскадных if, таблицы указателей на функции и / или полиморфизма?

Это интересно, но я не думаю, что это относится к области объектно-ориентированного программирования ... Я думаю, что это больше связано с методами синтаксического анализа .

16
задан anonymous coward 10 June 2009 в 16:09
поделиться

2 ответа

К сожалению, это не сработает для fatal / parse / etc. ошибки ...

Точно не помню, но я пробовал это и в некоторых случаях получал сообщение типа «не могу сгенерировать исключение без обходного пути ...», но я не могу вспомнить условия, чтобы получить это результат. Но сейчас пользуюсь этим способом и полностью доволен.

8
ответ дан 30 November 2019 в 23:09
поделиться

Используйте исключения для вещей, которые действительно находятся вне вашего контроля.

Хорошо:

try {
   if (fopen('file.txt', 'w') === false) {
      throw new Exception('File could not be opened for write access.');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

Плохо:

try {
   if (strlen($_POST['username']) < 5) {
      throw new Exception('Username too short');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

Первый способ хорош, потому что это происходит, когда это что-то, что пользователь или приложение не может контролировать. Он не может открыть файл, потому что? может быть много причин.

Второй способ - чрезмерное использование try / catch, когда вам следует использовать trigger_error. Второй способ заключается в том, что пользователь не знает правил проверки имени пользователя.

Короче говоря, используйте исключения, когда вы не можете контролировать то, что вы тестируете. Помните, что у исключений больше накладных расходов, чем у trigger_error :)

2
ответ дан 30 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: