참조를 사용하는 Foreach 루프의 예기치 않은 동작
참조와 함께 PHP의 foreach 루프를 사용하는 경우 다음 코드 조각에서 볼 수 있듯이 이상한 동작이 발생할 수 있습니다. :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
이 코드는 배열을 반복하기 위한 것입니다. $a는 첫 번째 루프에서 참조 변수 $v를 사용하고 두 번째 루프에서는 비참조 변수 $v를 사용합니다. 그러나 놀랍게도 출력에서는 배열의 마지막 요소인 'd'가 덮어쓰기되었음을 보여줍니다.
Array ( [0] => a [1] => b [2] => c [3] => c )
동작 설명
이것은 예상치 못한 일입니다. 동작은 PHP 문서에 잘 문서화되어 있습니다. foreach 루프에서 참조를 사용할 때 루프가 종료된 후에도 배열의 마지막 요소에 대한 참조가 유지된다는 경고가 표시됩니다. 이 문제를 방지하려면 unset()을 사용하여 참조 변수를 설정 해제하는 것이 좋습니다.
이 예에서 참조 변수 $v는 첫 번째 루프 이후 $a의 마지막 요소에 대한 참조로 유지됩니다. 두 번째 루프가 $a를 반복하면 루프가 반복될 때마다 값이 $v에 다시 할당됩니다. 그러나 $v는 $a의 마지막 요소에 대한 참조이므로 해당 요소의 값을 덮어씁니다.
동작에 대한 단계별 안내
더 명확하게 설명하기 위해 다음은 코드 조각에서 어떤 일이 발생하는지에 대한 단계별 가이드입니다.
해결책
To 이 문제를 방지하려면 첫 번째 루프 후에 참조 변수 $v를 설정 해제하세요.
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { }
위 내용은 참조가 포함된 PHP의 Foreach 루프가 마지막 배열 요소를 덮어쓰는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!