PHP 참조 Foreach 루프의 이상한 동작 이해
PHP에서 foreach 루프는 배열 또는 개체의 요소를 반복합니다. 그러나 루프 내에서 참조를 사용하는 경우(예: foreach ($a as &$v) { ... }) 예기치 않은 동작이 발생할 수 있습니다.
문제
다음 PHP 스크립트를 고려하십시오.
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
예상됨 출력:
'a', 'b', 'c' 및 'd' 요소가 포함된 배열.
실제 출력:
Array ( [0] => a [1] => b [2] => c [3] => c )
설명
예상치 못한 행동 foreach 루프 내에서 생성된 참조는 루프가 종료된 후에도 지속되기 때문에 발생합니다. 특히, $a 배열의 마지막 요소는 여전히 $v 변수에 의해 참조될 수 있습니다.
두 번째 foreach 루프가 실행되면 $v($a의 마지막 요소에 대한 참조)에 값이 다시 할당됩니다. 배열의 각 요소에 대해 $v는 $a의 마지막 요소에 대한 참조이므로 해당 배열 요소가 수정됩니다.
해결 방법
이러한 동작을 방지하려면 항상 참조 변수를 설정 해제하세요. foreach 루프 이후 완료:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
출력:
Array ( [0] => a [1] => b [2] => c [3] => d )
위 내용은 PHP의 참조 Foreach 루프가 예기치 않은 동작을 나타내는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!