#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;
}