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

时间:2017-07-23 02:38:20

标签: php arrays function pass-by-reference array-key-exists

empty($var)

运行此代码后,$ var [' key']尽管从未明确设置,但最终仍然存在。这意味着true将不再返回$foo = &$bar['key']; $echo array_key_exists('key', $bar)? "true" : "false"; ,这会让我感到困扰。

这种行为是否有意?我无法找到相关文档。

<小时/> 一个更简单的代码,可以得到相同的结果:

php composer dump-autoload

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

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