PHP - 通过引用传递抑制未定义的索引错误?

时间:2016-09-19 14:37:21

标签: php

我刚刚注意到我的php代码中存在以下行为,我想知道它为什么会发生。

$array = array();

test_value($array['invalid_index']); // Error -> Notice: Undefined index: invalid_index in ...
test_reference($array['invalid_index']); //No error

function test_value($value){}
function test_reference(&$value){}

我期望test_valuetest_reference都抛出未定义的索引错误,但奇怪的是,引用方法不会引发任何错误。

为什么?

1 个答案:

答案 0 :(得分:5)

函数参数by-reference接受先前未声明的变量;通过传递它们作为参考来宣布它们。如果你看一下by-reference参数的典型用例,这就完全合情合理了:

$foo = preg_match('/(.)/', 'bar', $baz);

此函数返回一个值,该值将分配给$foo。但是,此函数还应返回匹配项,这是第三个参数$baz。由于函数一次只能return一个值,因此通过填充引用传递的变量来实现额外的“返回”值。

如果必须预先初始化这些变量,您的代码将如下所示:

$baz = null;
$foo = preg_match('/(.)/', 'bar', $baz);
echo $baz[0];

这使得代码比必要的更复杂;因此,PHP不要求事先“存在”这些变量。