php,对 NULL 变量的关键检查已设置,如何?
php, key check on NULL variable gets set, how to?
这是我的例子:
$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
。我是运行宁php7
编辑:它是 &
符号,只是不确定为什么会产生那个结果
如果找不到密钥,请尝试使用 array_key_exists() 和 return null。
这个解决方案似乎可行,但不够优雅:
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;
}
您不能将具有不存在键的变量传递给函数(即使有引用),因为该值将传递给函数。
如果我们有 $data
并且在下一行如果我们有 $data['test']
,$data
变量将被更新为一个数组。
所以在您的情况下,当您使用 is($data['test']);
时,它会更新变量。
然后进入函数,检查isset($var)
。它已经设置,因为变量已经更新。所以 isset
得到 true
return。 return 将包含更新后的变量 $data['test']
.
我认为@Fred B 的解决方案适用于这种情况。
这是我的例子:
$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
。我是运行宁php7
编辑:它是 &
符号,只是不确定为什么会产生那个结果
如果找不到密钥,请尝试使用 array_key_exists() 和 return null。
这个解决方案似乎可行,但不够优雅:
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;
}
您不能将具有不存在键的变量传递给函数(即使有引用),因为该值将传递给函数。
如果我们有 $data
并且在下一行如果我们有 $data['test']
,$data
变量将被更新为一个数组。
所以在您的情况下,当您使用 is($data['test']);
时,它会更新变量。
然后进入函数,检查isset($var)
。它已经设置,因为变量已经更新。所以 isset
得到 true
return。 return 将包含更新后的变量 $data['test']
.
我认为@Fred B 的解决方案适用于这种情况。