За последние 24 часа нас посетили 15269 программистов и 1673 робота. Сейчас ищут 898 программистов ...

Двойная проверка входящих данных - действительно нужна?

Тема в разделе "PHP для новичков", создана пользователем Walk, 21 июл 2017.

  1. Walk

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

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Наставник на работе написал вот такой вот код:

    PHP:
    1.     public function test($id = null) {
    2.         $id = is_null($id) ? null : $id;
    3.        ...
    4.    }
    А мне не дает покоя - действительно ли нужна такая двойная проверка входящих данных или это лишнее?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тут собственно и нет прям проверки и тем более двойной
    есть объявление метода, который допускает отсутствие аргумента - будет подставляться дефолтное значение
    а следующей строчкой идет переобъявление переменной айди. сама по себе логика этого переобъявления - масло масляное и ничего не делает, но может просто стремится соответствовать какому-то единому стилю кодирования.
     
  3. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Вообще-то, это называется "индуский" код.
    И да, это лишнее - оно ничего не делает.
     
  4. Walk

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

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Я тоже об этом подумал, а также подумал, стоит ли перенимать опыт у такого наставника...
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    это не проверка
     
  6. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    это что то некошерное..
     
  7. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Напомнило похожую ситуацию:
    PHP:
    1. $param = is_null($var) ? true : false;
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Walk
    В натуре это даже не проверка, где же тогда условие? Наставник дает жару :D
     
  9. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Всякий может ошибиться или быть невнимательным.
    Тут дело в "системе", - если такие плюхи частые, то не стоит, если единичные случаи, то просто игнорируй их.
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Если is_null() заменить на empty(), то в коде ВНЕЗАПНО появляется смысл. Возможно, тот, который задумывался.
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не появляется, пока он внутри функции.
    но вне функции он появится.

    Хотя мне кажется, что теория про однотипность наиболее вероятно. Если в проверке заменить null на 0 или пустую строку, то всё сразу встаёт на свои места.

    хотя я для дефолтных параметров никогда не юзаю нулл для скалярных параметров. я юзаю дефолтные значения. внезапно.
     
  12. Познающий php

    Познающий php Новичок

    С нами с:
    23 мар 2017
    Сообщения:
    381
    Симпатии:
    74
    А в чем может быть такой смысл? По-моему только хуже станет, мы переопределим всевозможные нули, пустые строки и пустые массивы как NULL. Думаю, такое только запутает код.
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    @Познающий php , функция empty создавалась именно для того, чтобы объединить типичные случаи "пустого" значения в одну проверку. Часто именно такой набор соответствует логике приложения: не задано вообще или пустая строка или число ноль или строка из символа "0" или пустой массив… Короче, пусто :)

    Может кто не знает, подскажу:

    if (! empty($x))
    и
    if ($x)

    работают одинаково на всех мыслимых значениях. С одной лишь разницей: если переменная $x вообще не определена в этом месте, то if ($x) должно вызвать предупреждение, а empty() страхует от этого.
    --- Добавлено ---
    Cтрого говоря эта строка ничего не добавляет. но возможно служит заготовкой для будущего развития )))

    Дефолтное значение в аргументе функции может быть только константой, а в выражении ты можешь заменить его на какое-то вычисление.
    --- Добавлено ---
    Мы не знаем контекста, без него что угодно может выглядеть глупо. Если твоя цель высмеять наставника, — окей, ты сделал это.
     
    [vs] нравится это.