PHP: Обязательные параметры

#php

#php

Вопрос:

Каким был бы наилучший способ, когда дело доходит до практики, вернуть false, если некоторый параметр не передан в функцию PHP?

Главным образом потому, что я вызываю, эта функция будет вызываться с параметрами, которые поступают из frotend , что означает, что пользователь может передать null в качестве параметра, и я хочу вернуть false, если это произойдет.

В верхней части функции я помещаю:

 if (empty($param1) || empty($param2) || empty ($param3)) {
            return false;
        }
  

Есть ли лучшие способы сделать это?

Комментарии:

1. Что не так с тем, что у вас есть?

Ответ №1:

Короче говоря: Исключение. Сейчас мы находимся в 2011 году, false в случае ошибок не рекомендуется.

Однако я бы не стал тестировать с помощью empty() , потому что это охватывает '' (пустую строку, конечно) и 0 тоже. Вероятно, это требуется не во всех случаях.

Комментарии:

1. Создайте описательное исключение, по крайней мере. Если вы передадите неверные значения, это будет сделано не специально, и вы захотите узнать, какой фрагмент кода пошел не так.

Ответ №2:

Для этого у нас есть исключение SPL InvalidArgumentException.

Ответ №3:

Просто для удовольствия:

 function test() {
  if( count(array_filter(func_get_args(), create_function('$v', 'return isset($v);'))) ) {
    throw new InvalidArgumentException("Invalid parameters");
  }
}
  

Комментарии:

1. Просто подумал о подобном решении, но с function($v) { return is_null($v); } вместо этого (PHP >= 5.3) 😉

Ответ №4:

Будьте осторожны: empty(0) вернет false.

возможно, isset() лучше подходит для вашего случая.

Ответ №5:

Вы можете обрабатывать их так, как вы это делаете, или вы можете указать значения по умолчанию для функции. Многие вызовы PHP обрабатывают необязательные параметры таким образом.

 function($param1, $param2='default',$param3='default')
  

Таким образом, вы можете гарантировать, что ваш код каждый раз имеет правильные значения или, по крайней мере, «нормальные», независимо от того, что вам передается.

Вы также можете создать исключение в своем коде.

Ответ №6:

Я предпочитаю этот способ:

 function a($param1 = null, $param2 = null) {
    if(!isset($param1, $param2)
        return false;
}