PHP Foreach Pass by Reference: 마지막 요소 중복 미스터리 공개
다음 PHP 코드를 고려하세요.
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) { /* do nothing by reference */ } print_r($arr); foreach ($arr as $item) { /* do nothing by value */ } print_r($arr);
실행 시 원래 배열 $arr가 예기치 않게 수정되어 다음과 같은 결과가 출력됩니다.
Array ( [0] => foo [1] => bar [2] => baz ) Array ( [0] => foo [1] => bar [2] => bar )
동작 이해
초기 foreach 루프 후에 변수는 $item은 $arr[2]와 동일한 메모리 위치에 대한 참조로 유지됩니다. 결과적으로 인수를 값으로 전달하는 두 번째 foreach 루프의 각 반복은 참조된 값(따라서 $arr[2])을 새 반복의 값으로 대체합니다.
자세한 설명
첫 번째 루프에서:
첫 번째 루프가 끝나면 $item은 여전히 $arr[2]를 가리킵니다.
두 번째 루프에서:
오해 해명
이 동작은 버그로 간주되지 않습니다. 이는 PHP에서 의도한 참조 동작과 일치합니다. 루프 외부에서 다음 구문을 사용한 경우 유사한 결과가 관찰됩니다.
for ($i = 0; $i < count($arr); $i++) { $item = $arr[$i]; }
결론
PHP에서 참조로 작업할 때 다음을 인식하는 것이 중요합니다. 참조된 변수를 통해 수정한 내용도 원래 값에 영향을 미칩니다. 이 동작은 원하는 결과에 따라 효과적으로 활용되거나 방지될 수 있습니다.
위 내용은 참조별 전달과 함께 foreach 루프를 사용할 때 PHP 배열의 마지막 요소가 중복되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!