我总是发现自己在写一些类似的东西:
if(isset($var))
{
DoSomethingWith($var);
}
else
{
DoSomethingWith(null);
}
要么
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没有为“ key”设置的值?
我想应该是这样的:
function get_var_if_set($a)
{
return (isset($a) ? $a : null);
}
但这是行不通的,因为用未设置的变量调用get_var_if_set()总是会生成一个Notice,因此可能需要一点魔力.
谢谢大家.
编辑
删除答案的用户建议通过引用传递变量,因为如果$variable不存在,PHP将传递null.
因此,这很完美,请查看以下解决方案(可能为equivalent):
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建议的合并运算符
问题as you can see是它们以某种方式在return语句中初始化传递的变量.
我们不想要那个.
解决方法:
如果使用PHP 7.0,则可以使用空合并运算符.
return $a ?? null;
注意:运算符检查变量是否存在并且不为空.因此,如果变量已设置但为空,则它将返回空变量.