0
function value(&$param){}

value($var['key']);
echo array_key_exists("key", $var)? "true" : "false"; //true

运行此代码后,$var['key'] 最终存在,尽管从未明确设置过。这意味着empty($var)将不再返回true,这让我很困扰。

这种行为是有意的吗?我找不到这方面的文档。


给出相同结果的更简单的代码:

$foo = &$bar['key'];
$echo array_key_exists('key', $bar)? "true" : "false";
4

2 回答 2

0

由于您需要将变量传递给函数,因此必须首先创建引用。在其他语言中,您会收到错误消息,因为密钥不存在,因此无法传递给函数。但是,在 PHP 中,创建变量和使用变量没有区别。因此,您正在创建密钥然后传递它,但是 PHP 语法对您隐藏了它。

当由 PHP 解释执行时,实际上会发生这种情况:

$var['key'] = null;
value($var['key']);

这确实是解释器的一种奇怪行为。如果变量是按值传递的,则会产生运行时错误,因为它不会被隐式创建。

于 2017-07-23T02:52:05.807 回答
0

要通过引用传递,必须有引用才能传递。要传递引用,必须创建变量。因此,可以预期在上面的代码中创建变量。

这与内置exec( $cmd, $out)$out 的情况类似,即使 $cmd 不产生任何输出。

在您的代码中,您可以尝试empty($var['key'].

于 2017-07-23T02:44:53.957 回答