2016-09-19 3 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

함수 매개 변수 참조는 이전에 선언되지 않은 변수를 허용합니다. 그들은 그들을 참조로 전달함으로써 선언되고있다.

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

이 기능 반환$foo에 할당됩니다 하나 개의 값, : 당신이 참조에 의한 매개 변수의 일반적인 사용 사례를 보면 이것은 완전한 의미가 있습니다. 그러나이 함수는 또한 일치 항목을 반환해야하며 여기서 일치 항목은 $baz입니다. 함수는 한 번에 하나의 값만 return 수 있기 때문에 참조로 전달 된 변수를 채우면 추가 "반환"값을 구현할 수 있습니다. 당신이 이러한 변수를 미리 초기화해야한다면

, 당신의 코드는 다음과 같습니다

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

이 필요 이상으로 복잡한 코드를 만드는; 따라서 PHP는 이러한 변수가 "존재"하지 않도록 사전에 요구합니다.