foreach에서 참조로 전달: 예기치 않은 동작 이해
PHP foreach 루프는 배열의 각 요소를 반복하지만 경우에 따라 , 그 결과는 놀라울 수 있습니다. 다음 코드를 고려해보세요.
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
예상대로 출력은 'zero', 'one', 'two' 및 '3'이어야 합니다. 하지만 이 코드를 실행하면 '0', '1', '2', '2'가 대신 표시됩니다.
이 예상치 못한 동작은 PHP의 참조 변수 개념에서 비롯됩니다. 첫 번째 foreach 루프에서는 참조 연산자 "&"를 사용하여 $a 배열의 각 요소에 대한 참조 변수($v)를 만듭니다. 즉, $v에 대한 모든 변경 사항은 $a의 해당 요소에도 영향을 미칩니다.
처음에는 $a의 모든 요소가 일반 변수입니다. 그러나 첫 번째 루프 후에는 $a[3]만 참조 변수로 남습니다. 이는 배열을 반복하는 동안 이전 참조 변수($v)가 각각의 새 요소로 덮어쓰기 때문입니다.
두 번째 루프에서 $v를 echo하면 $a[3]를 가리키고, 이전 반복에서는 '2'로 설정되었습니다. 따라서 마지막 반복에서는 '3' 대신 '2'가 에코됩니다.
일반 변수와 참조 변수의 차이점과 이들이 foreach 루프에서 어떻게 상호 작용하는지 이해함으로써 이러한 예기치 않은 동작을 방지하고 코드가 의도한 대로 작동하는지 확인하세요.
위 내용은 참조별 전달을 사용할 때 PHP `foreach` 루프가 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!