php,关键检查NULL变量得到设置,如何?

时间:2016-12-23 06:08:09

标签: php arrays null isset

这是我的例子:

$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

编辑:它是&符号,只是不确定为什么会产生这种结果

3 个答案:

答案 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的解决方案适用于这种情况。