Наставник на работе написал вот такой вот код: PHP: public function test($id = null) { $id = is_null($id) ? null : $id; ... } А мне не дает покоя - действительно ли нужна такая двойная проверка входящих данных или это лишнее?
тут собственно и нет прям проверки и тем более двойной есть объявление метода, который допускает отсутствие аргумента - будет подставляться дефолтное значение а следующей строчкой идет переобъявление переменной айди. сама по себе логика этого переобъявления - масло масляное и ничего не делает, но может просто стремится соответствовать какому-то единому стилю кодирования.
Всякий может ошибиться или быть невнимательным. Тут дело в "системе", - если такие плюхи частые, то не стоит, если единичные случаи, то просто игнорируй их.
Если is_null() заменить на empty(), то в коде ВНЕЗАПНО появляется смысл. Возможно, тот, который задумывался.
не появляется, пока он внутри функции. но вне функции он появится. Хотя мне кажется, что теория про однотипность наиболее вероятно. Если в проверке заменить null на 0 или пустую строку, то всё сразу встаёт на свои места. хотя я для дефолтных параметров никогда не юзаю нулл для скалярных параметров. я юзаю дефолтные значения. внезапно.
А в чем может быть такой смысл? По-моему только хуже станет, мы переопределим всевозможные нули, пустые строки и пустые массивы как NULL. Думаю, такое только запутает код.
@Познающий php , функция empty создавалась именно для того, чтобы объединить типичные случаи "пустого" значения в одну проверку. Часто именно такой набор соответствует логике приложения: не задано вообще или пустая строка или число ноль или строка из символа "0" или пустой массив… Короче, пусто Может кто не знает, подскажу: if (! empty($x)) и if ($x) работают одинаково на всех мыслимых значениях. С одной лишь разницей: если переменная $x вообще не определена в этом месте, то if ($x) должно вызвать предупреждение, а empty() страхует от этого. --- Добавлено --- Cтрого говоря эта строка ничего не добавляет. но возможно служит заготовкой для будущего развития ))) Дефолтное значение в аргументе функции может быть только константой, а в выражении ты можешь заменить его на какое-то вычисление. --- Добавлено --- Мы не знаем контекста, без него что угодно может выглядеть глупо. Если твоя цель высмеять наставника, — окей, ты сделал это.