ФорумПрограммированиеPHP для идиотов → Обработка исключений. Правильный подход.

Обработка исключений. Правильный подход.

  • nektoVova

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz Апрель 3, 2012, 7:58 д.п.

    Изучаю PHP. Приведенный ниже код - чистейшая учебная импровизация.
    Разбираюсь с исключениями.
    Ситуация: имеем класс User(код ниже). В процессе создания объекта может быть не задано имя, логин, пароль или все вместе.
    Задача: обработать отдельно отсутствие каждого из обязательных для инициализации полей объекта параметров, т.е. обработать одновременно несколько исключений в одном блоке try..catch(возможно сумбурно изъясняюсь, сорри).
    Недолго думая соорудил нижеследующий код:

    class User {

    private $name;
    private $login;
    private $password;

    function __construct($name = "", $login = "", $password = "") {
    try {
    if ($name == "") $inputs[] = " имя!";
    if ($login == "")$inputs[] = " логин!";
    if ($password == "") $inputs[] = " пароль!";

    if(isset($inputs)) throw new loginException($inputs);

    $this->name = $name;
    $this->login = $login;
    $this->password = $password;

    } catch (loginException $e) {
    echo $e->getMessage();

    }
    }

    …………….

    class loginException extends Exception {

    function __construct($inputs) {
    foreach ($inputs as $value)
    $msg .= "Введите $value<br>";
    parent::__construct($msg);
    }

    }

    Нутром, чую, то это реальный гавнокод, за сим интересует, как правильно/грамотно/не гавнокодя обработать несколько разнородных исключений в одном месте программы?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Апрель 3, 2012, 8:09 д.п., спустя 10 минут 55 секунд

    nektoVova, ну в данной трактации это коненчо гавнокод, причем полнейший. У тебя есть юзер - это блин модель, а не валидатор :-)

    По факту ты замутил валидатор. Тебе надо было Просто у модели завести метод аля validate.

    По простому. констркутор модели ниху не должен содержать, иначе при некоторых условиях ты ее не сможешь банальн осоздать - это пиздец :-)
    Сапожник без сапог
  • nektoVova

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz Апрель 3, 2012, 8:20 д.п., спустя 11 минут 43 секунды

    Не, до MVC я еще не добрался. То, что проверка реализована в конструкторе класса-компонента модели - неважно. У меня хватает ума понять, что это фигня. Мне, блин, просто нужен был код на скорую руку. Интересует сам факт обработки нескольких исключений в одном try. Т.е. если не городить эту хуйню с массивом $inputs, то будет обработано только первое выброшенное исключение, например, не задано имя, а о том, что еще и не задан логин, а может - и пароль, пользователь не узнает. Есть какой-то тру способ обрабатывать все возможные исключения в пределах одного try?
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2012, 8:36 д.п., спустя 15 минут 39 секунд

    if (count($inputs))
  • nektoVova

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz Апрель 3, 2012, 9:21 д.п., спустя 45 минут 8 секунд

    kostyl, смешно.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2012, 9:44 д.п., спустя 23 минуты 3 секунды

    Бля, у тебя же одно исключение и ты передаешь в него свои ошибки - хули, на выходе все ошибки есть… Или ты про это
    try {
    }
    catch (LoginException $e) {
    }
    catch (EmailException $e) {
    }
    catch (Exception $e) {
    }

    ?
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz Апрель 3, 2012, 9:53 д.п., спустя 8 минут 46 секунд


    try {
    }
    catch (LoginException $e) {
    }
    catch (EmailException $e) {
    }
    catch (Exception $e) {
    }

    ?


    Это плохо когда так делают? Просто я так и делаю
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2012, 9:54 д.п., спустя 35 секунд

    Ivan, это нормально, плохо когда порядок наоборот ))
  • Федор Казин

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz Апрель 3, 2012, 10:20 д.п., спустя 26 минут 23 секунды

    Лизать это призвание
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2012, 11:54 д.п., спустя 1 час 33 минуты 49 секунд

    иначе при некоторых условиях ты ее не сможешь банальн осоздать

    при каких?
    не всё полезно, что в swap полезло
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2012, 1:29 п.п., спустя 1 час 35 минут 4 секунды

    при каких?

    вроде при не отлавливании какого нить экцепшена
  • nektoVova

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz Апрель 3, 2012, 11:33 п.п., спустя 10 часов 4 минуты 33 секунды

    Вопрос снят.
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2012, 11:40 п.п., спустя 6 минут 30 секунд

    http://pyha.ru/forum/topic/6253.0
    не всё полезно, что в swap полезло
  • nektoVova

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz Апрель 4, 2012, 2:04 д.п., спустя 2 часа 24 минуты 13 секунд

    master, благодарю видел.
    Я действительно неправильно понимал суть исключений.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Апрель 5, 2012, 9:10 д.п., спустя 1 день 7 часов 5 минут

    nektoVova, позырь до пары еще set_exception_handler или как то так…

Пожалуйста, авторизуйтесь, чтобы написать комментарий!