Как делать не надо

Печать RSS
538

М

Малиновые штаны
0
Башка (21 Июня 2013 / 23:50)
26. Flyd, вопрос не удобства, вопрос качества и читаемости. Есть механизм исключений, и есть механизм их отлова. Коды ошибок - устарело. Иногда лучше сделать сложнее, но качественее, как в случае с исключениями. Лучше пользуйтесь ими, советую
Я что-то не улавливаю улучшение читаемости от того, что написать
<?php 
if(!$dir->recover()){
// $dir->error;
}
И
<?
try {$dir->recover()
} catch (Exception $e) {
    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";
}
Изменил: Михаил (22.06.2013 / 01:23)
А
Автор
Оранжевые штаны
0
Постараюсь объяснить.
Ошибка в ОО коде ведет к принудительному завершению выполнения, если ошибка не обрабатывается (The Diaper Pattern Stinks), это нужно для того, чтобы не оставлять в системе не обработанные ошибки. Вообще, если дать волю программистам, они никогда не будут смотреть в свойство $dir->error, а try..catch заставляет это делать, иначе бяда. Потому этот подход хоть и несколько страдает в читаемости в общем смысле, зато делает процесс обработки ошибок более строгим.
В

Чатланин
0
Я вижу преимущество исключений вот в чём.
Допустим есть функция, она внутри себя использует ещё какую то функцию, та в свою очередь может использовать ещё что-то..
<?php
function one(){
  //Проверяем что-то, выбиваем ошибку
   if($something){
  throw new Exception('Тут ошибка чувак');
   }
  //Используем ещё какую то функцию
   $a = secondFunc();
}

function secondFunc(){
    //Проверяем что-то, выбиваем ошибку
   if($something){
    throw new Exception('Тут ошибка чувак во второй функции');
   }
  //А тут используем ещё какую то функцию
   $b = thirdFunc();
}

function thirdFunc(){
//Проверяем что-то, выбиваем ошибку
   if($something){
    throw new Exception('Тут ошибка чувак в 3ей функции');
   }
}


//А в итоге мы обрабатываем сразу все возможные внутри ошибки одним движением

try{
$a = one();
}catch(Exception $e){
echo $e->getMessage();
}
?>
Вот в чём удобство то. Все возможные ошибки обрабатываются одним движением, при этом внутри всех этих функций не нужны ни какие свои механизмы обработки ошибок. Как это будет старым способом выглядеть? Хреново будет выглядеть старым способом.
Изменил: Валерий (22.06.2013 / 13:08)
М

Малиновые штаны
0
Понял, спасибо

Последний из могикан
0
33. valerik, ну да в общем то,
в первом варианте индокод получается,
а во втором как надо ))
Изменил: GodZiLLa (23.06.2013 / 20:57)
А
Автор
Оранжевые штаны
0
И

Пацак
0
https://github.com/Reistlin/yandexApi/blob/master/ApiYandex.php если не сложно рассмотри,особенно интересует правильно ли я использовал public,protected,private?и как лучше было бы написать выбрасывание исключений?
Изменил: Изнаур (27.06.2013 / 12:15)
А
Автор
Оранжевые штаны
0
37. Iznaur95, в твоем коде так мало ошибок, за которые можно зацепиться, что мне стыдно за них цепляться. Потому видеообзор на этот код делать не буду.
А
Автор
Оранжевые штаны
0
A

Чатланин
0
Iznaur95 (27 Июня 2013 / 12:13)
https://github.com/Reistlin/yandexApi/blob/master/ApiYandex.php если не сложно рассмотри,особенно интересует правильно ли я использовал public,protected,private?и как лучше было бы написать выбрасывание исключений?

1. Кода действительно мало чтобы оценивать.
2. В основном, претензии к форматированию (имя переменной с заглавной буквы, нет отступов между конструкциями if и тп). Да и в целом нет принадлежности к стандартам: camelCase (psr) или snake_case (kohana style, etc).
Закрывающий тег php "?>" в полностью php файле - плохой стиль.
3. Вывод ошибки и список ошибок в одном методе - плохо.
4. throw new Exception('Не удалось получить данные'); в методе обработки данных - тоже не гуд. Т.е. данное исключение должен выбрасывать метод получения данных, а не метод обработки.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск