Я всегда ловлю себя на том, что пишу что-то вроде:
if(isset($var))
{
DoSomethingWith($var);
}
else
{
DoSomethingWith(null);
}
or
if(isset($arr["key"]))
{
DoSomethingWith($arr["key"];
}
else
{
DoSomethingWith(null);
}
Мой вопрос именно в этом:
Есть ли способ написать функцию get_var_if_set(), чтобы вы могли просто написать...
DoSomethingWith(get_var_if_set($var));
/// and
DoSomethingWith(get_var_if_set($arr["key"]));
....БЕЗ уведомления, если $var не существует или что $arr не имеет заданного значения для «ключа»?
Я думаю, это должно быть что-то вроде этого:
function get_var_if_set($a)
{
return (isset($a) ? $a : null);
}
Но это не работает, потому что вызов get_var_if_set() с неустановленными переменными всегда будет генерировать Notice, так что может понадобиться немного магии.
Спасибо всем.
Редактировать Пользователь, который удалил свой ответ, предложил передавать переменные по ссылке, так как PHP передаст null, если $variable не существует.
Так что это было бы идеально, взгляните на эти решения (которые, вероятно, могут быть эквивалентными):
function get_var_if_set(&$a) { return (isset($a) ? $a : null); }
function get_var_if_set(&$a) { return $a ?? null; } // Only in PHP 7.0+ (Coalescing operator)
Примечание. Оператор объединения предложен Koray Küpe.
Проблема, как вы видите, заключается в том, что они каким-то образом инициализируют переданные переменные в операторе return. Мы не хотим этого.
echo $a;
иecho @$a;
. Хотя я думаю, что подавление ошибок вообще не очень хорошая вещь. - person Lucas Krupinski   schedule 08.05.2017DoSomethingWith($var??null);
илиDoSomethingWith($var?:null);
- person Thamilhan   schedule 08.05.2017@
перед переменной? - person Antonios Tsimourtos   schedule 08.05.2017@
подавляет ошибки - person Lucas Krupinski   schedule 08.05.2017return($a)?$a:null;
- person Kamran Khatti   schedule 08.05.2017