Php 通过引用传递变量创建所述变量

Php 通过引用传递变量创建所述变量,php,arrays,function,pass-by-reference,array-key-exists,Php,Arrays,Function,Pass By Reference,Array Key Exists,运行此代码后,$var['key']尽管从未显式设置,但仍然存在。这意味着empty($var)将不再返回true,这让我很烦恼 这种行为是故意的吗?我找不到这方面的文件。 给出相同结果的更简单代码: function value(&$param){} value($var['key']); echo array_key_exists("key", $var)? "true" : "false"; //true 要通过引用传递,必须有一个要传递的引用。要传递引用,必须创建变量。因此

运行此代码后,$var['key']尽管从未显式设置,但仍然存在。这意味着
empty($var)
将不再返回
true
,这让我很烦恼

这种行为是故意的吗?我找不到这方面的文件。
给出相同结果的更简单代码:

function value(&$param){}

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

要通过引用传递,必须有一个要传递的引用。要传递引用,必须创建变量。因此,在上面的代码中创建变量是意料之中的

这与内置的
exec($cmd,$out)
的情况类似,其中$out将存在,即使$cmd不产生输出


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

由于需要将变量传递给函数,因此必须首先创建引用。在其他语言中,由于键不存在,因此无法传递给函数,因此会出现错误。但是,在PHP中,创建变量和使用变量之间没有区别。因此,您正在创建键和n传递它,但PHP语法对您隐藏了它

当由PHP执行时,实际上会发生以下情况:

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

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

您的
函数在做什么?为什么
函数funct(&$param){}
在本例中是否相关?@Maxime啊,我在编写示例时搞砸了。Value()和Funct()实际上是同一件事。如果这是原因,我希望在其他情况下也会这样:使用
函数值($param){}运行相同的代码否则,变量将不会在最后被创建,加上中间会有错误。因为$ARAM没有被引用传递,所以不是相同的。$ PARAM直到函数在函数内才被创建。我不理解为什么通过值传递它会使它变得如此不同。在这两种情况下,$PARAM都需要一个不需要的值。存在。
$var['key'] = null;
value($var['key']);