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

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

  • nektoVova

    Сообщения: ? Репутация: 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 .= &quot;Введите $value<br>&quot;;
    parent::__construct($msg);
    }

    }

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

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

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

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

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

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

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

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

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

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

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

    if (count($inputs))
  • nektoVova

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

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

    kostyl, смешно.
  • kostyl

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

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

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

    ?
  • Ivan

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

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


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

    ?


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

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

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

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

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

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

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

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

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

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

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

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

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

    при каких?

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

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

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

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

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

    Spritz 3 апреля 2012 г. 23:40, спустя 6 минут 30 секунд

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

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

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

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

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

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

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

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