这是我的例子:
$data = null;
var_dump($data); // returns null
is($data['test']);
var_dump($data); // returns array (size=1)
// 'test' => null
function is(&$var, $default = null)
{
return isset($var) ? $var : $default;
}
请注意,在我运行is($data['test'])
后,$data
变为$data['test'] = null
为什么会出现这种行为?
我希望得到null
。我正在运行php 7
编辑:它是&
符号,只是不确定为什么会产生这种结果
答案 0 :(得分:0)
尝试使用array_key_exists(),如果找不到密钥,则返回null。
答案 1 :(得分:0)
这个解决方案似乎有效,但不太优雅:
is($data, 'test');
var_dump($data); // returns array (size=1)
// 'test' => null
function is($var, $key, $default = null)
{
return isset($var[$key]) ? $var[$key] : $default;
}
答案 2 :(得分:0)
您不能将具有非现有键的变量传递给函数(即使使用引用),因为该值将传递给函数。
如果我们有$data
,如果我们$data['test']
,则在下一行,$data
变量将更新为数组。
因此,在您的情况下,当您使用is($data['test']);
时,它会更新变量。
然后转到该函数,并检查isset($var)
。它已经设置,因为变量已经更新。因此isset
获得true
次返回。该返回将包含更新的变量$data['test']
。
我认为@Fred B的解决方案适用于这种情况。