2014-10-21 3 views
8

튜토리얼 코드를 작성하고 실행 한 후 아주 이상하게 보였습니다.앰퍼샌드가 배열 var_dump의 끝에 붙습니다.

내 Chrome 확장 프로그램 Var Dumpling에서 값의 유형에 앰퍼샌드가 추가 되었기 때문에 배열의 마지막 항목을 보지 못했습니다.

나는이 코드 조각으로 테스트 한 다음 위해서 var_dump의

$alphabet = array('a', 'b', 'c'); 

foreach ($alphabet as &$letter) { 
    $letter .= 'a'; 
} 

var_dump($alphabet); 

결과는 다음과 같습니다

array(3) { 
    [0]=> 
    string(2) "aa" 
    [1]=> 
    string(2) "ba" 
    [2]=> 
    &string(2) "ca" 
} 

당신은 마지막 항목 대신 내가 string(2) "ca"을 기대하는 것이 무엇의 &string(2) "ca" 것을 볼 수 있습니다. 이 논리 부분에 아무런 문제가 없습니다. $alphabet[2]을 호출 할 수 있으며 마지막 항목 ca의 값을 반환합니다.

제가 궁금해하는 것은이 대회 나 PHP에서의 이상한 hickup입니까?

답변

8

이것은 변수가 참고 인 것으로 나타냅니다. 대부분의 경우 무시하고 계속하십시오.

이 특별한 경우 배열의 마지막 요소가 foreach 루프에서 계속 참조되고 있음을 의미합니다. 참조로 사용 했으므로 루프의 마지막 항목은 루프가 닫힌 후에도 여전히 존재하므로 해당 항목에 대한 참조는 여전히 존재합니다. 또는 짧게 :

루프가 끝나면 $ letter는 여전히 $ alphabet [2]에 대한 참조입니다. unset($letter) 인 경우 해당 앰퍼샌드가 사라져야합니다.

http://php.net/manual/en/language.references.php

관련 문제