За последние 24 часа нас посетили 35027 программистов и 1756 роботов. Сейчас ищут 757 программистов ...

Рациональное использование if

Тема в разделе "PHP для новичков", создана пользователем Zar, 26 фев 2013.

  1. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Использую я конструкцию if и практически всегда она у меня сильно разрастается, ведь нужно к примеру проверить все ли поля заполнены на входе, потом все ли имеют нужную длину и т.д. В итоге в условии накапливается длинная строка всякого всего. Но рассматривая код мастеров, я заметил, что условия всегда у них короткие. Но не разбивать же на 10 конструкций то, что можно сделать одной.

    На что нужно обратить внимание, чтобы не взращивать такие длинные условия? Спасибо!
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно поднять флаг ошибки =) типа $error=true;

    если вам надо проверить несколько полей то можно засовываать их в фи через AND, но тогда вы не сможете сказать человеку где именно он неправильно ввёл.
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    напишите один раз функции-заготовки или класс для проверки. так называемый валидатор. или возьмите готовый.
    тогда все проверки надо будет описывать коротко и в одну строку для каждого поля.
    валидатор по имени поля проверяет кадлое поле на те проверки которые укажете валидатору - пустое/непустое, формат значения, диапазон значения, регулярка и т.д. и на выходе массив с ошибками для каждого поля. или пустой массив - если форма заполенна корректно.
     
  4. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Однозначно, свой!
    runcore, спасибо! Вы направили мою мысль как-раз в искомое русло. Отаетили на мой вопрос.
     
  5. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Кажется, такая реализация свою задачу выполняет. Может, есть, на что указать с целью улучшения?

    Код (Text):
    1.  
    2. class Validate {
    3.  
    4. private $username;
    5. private $email;
    6. public $message = '';
    7.  
    8. public function Valid_username($username) {
    9. $this->username = $username;
    10. if (is_string($this->username)) {
    11. if (strlen($this->username) > 50) {
    12. $this->message = "Cлишком длинное имя!\n";
    13. return FALSE;
    14. }
    15. elseif (strlen($this->username) < 3) {
    16. $this->message = "Cлишком короткое имя!\n";
    17. return FALSE;
    18. }
    19. elseif (!preg_match('/^(\w|[а-яА-Я-]){3,50}$/i', $this->username)) {
    20. $this->message = "Недопустимые символы в имени!\n";
    21. return FALSE;
    22. }
    23. else {
    24. $this->message = "Имя прошло проверку!\n";
    25. return TRUE;
    26. }
    27. }
    28. elseif (!is_string($this->username)) {
    29. $this->message = "Неверный формат данных!\n";
    30. return FALSE;
    31. }
    32. }
    33.  
    34. public function Valid_email($email) {
    35. $this->email = $email;
    36. if (is_string($this->email)) {
    37. if (!preg_match('/^(\w|[-.]){3,30}@(\w|[-.]){3,30}$/i', $this->email)) {
    38. $this->message = "Недопустимые символы в имени!\n";
    39. return FALSE;
    40. }
    41. else {
    42. $this->message = "Имя прошло проверку!\n";
    43. return TRUE;
    44. }
    45. }
    46. elseif (!is_string($this->email)) {
    47. $this->message = "Неверный формат данных!\n";
    48. return FALSE;
    49. }
    50. }
    51. }
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а ты всё сраз упроверить не можешь? а то будет по одному сообщению слать юзерам, их запарит
     
  7. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Ты абсолютно прав!