>백엔드 개발 >PHP 튜토리얼 >Pass-by-Reference를 사용하는 PHP의 'foreach'가 예상치 못한 결과를 생성하는 이유는 무엇입니까?

Pass-by-Reference를 사용하는 PHP의 'foreach'가 예상치 못한 결과를 생성하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-12 12:58:18947검색

Why Does PHP's `foreach` with Pass-by-Reference Produce Unexpected Results?

foreach의 PHP 참조에 의한 전달

PHP에서 참조에 의한 전달을 사용하면 함수나 메서드가 복사본이 아닌 원래 변수를 수정할 수 있습니다. . foreach 루프에서 사용하는 경우 완전히 이해하지 못하면 예기치 않은 동작이 발생할 수 있습니다.

출력 설명: zero one two two

제공된 코드에서:

$a = array ('zero','one','two', 'three');

foreach ($a as &$v) {}

foreach ($a as $v) {
  echo $v.PHP_EOL;
}

첫 번째 foreach 루프는 참조로 전달(&)을 사용하여 배열 요소를 직접 수정합니다. 이는 $v의 값이 변경되면 $a 배열의 해당 요소에 직접 영향을 미친다는 의미입니다.

첫 번째 루프에서는 각 요소의 값이 null로 설정됩니다. 이는 참조별 전달 루프에 값이 할당되지 않으면 배열의 해당 값이 null로 설정되기 때문입니다.

두 번째 루프에서 출력은 각 요소의 현재 값을 표시합니다. 수정된 무효화 배열에서. 처음 세 요소는 초기화 시 할당된 값을 유지합니다. 그러나 네 번째 요소($a[3])는 첫 번째 루프에서 null로 설정되었습니다.

따라서 두 번째 루프의 후속 반복에서는 원래 값(0, 1, 2)을 인쇄합니다. $a[3]에 대한 null 값이 뒤따릅니다. 마지막 반복에서 $v의 값은 여전히 ​​$a[3]의 null 값을 가리키고 있으며, 그 결과 'two'가 null이 되기 전에 마지막으로 할당된 값이었기 때문에 출력으로 반복됩니다.

위 내용은 Pass-by-Reference를 사용하는 PHP의 'foreach'가 예상치 못한 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.