繁体   English   中英

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

[英]Passing variable by reference creates said variable

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"; 

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

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

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

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

当由PHP解释执行时,这实际上发生了:

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

从解释器的角度来看,这确实是一种奇怪的行为。 如果该变量按值传递,则将生成运行时错误,因为不会隐式创建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM