2016-09-19 36 views
1

我剛剛在我的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拋出未定義指數錯誤,但奇怪的是參照該方法不拋出任何錯誤。

爲什麼?

回答

5

函數參數by-reference接受先前未聲明的變量;他們正在通過傳遞他們作爲參考。這使得完整意義上的,如果你看一下通過定位參數的典型應用案例:

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

此功能返回一個值,該值將被分配到$foo。但是,這個函數也應該返回匹配,這是第三個參數$baz。由於一次只能有一個函數return,因此通過填充由引用傳遞的變量來實現附加的「返回」值。

如果你必須預先初始化這些變量,你的代碼應該是這樣的:

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

這使得代碼比需要更復雜;因此,PHP不要求事先存在這樣的變量。