[英]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.