Foreach의 PHP 참조로 전달
PHP에서 변수는 일반 변수이거나 참조 변수일 수 있습니다. 변수의 참조를 다른 변수에 할당하면 후자는 참조 변수가 되어 본질적으로 원본과 동일한 메모리 위치에 바인딩됩니다. 이 동작은 참조별 전달 구문(&)과 함께 foreach 루프를 사용할 때 영향을 미칩니다.
다음 코드를 고려하세요.
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
이 코드의 출력은 다음과 같습니다.
zero one two two
왜 이런 일이 발생하나요?
첫 번째 foreach 루프에서 $a의 각 요소는 변수 $v에 대한 참조입니다. 즉, $v를 수정하면 $a의 해당 요소도 수정됩니다.
구체적으로 첫 번째 루프의 마지막 반복 중에 $v에 $a[3] 값이 할당됩니다(예: ' 삼'). 그러나 이 할당은 참조 관계를 생성하므로 $a[3]는 참조 변수가 됩니다(&를 사용하여 명시적으로 할당되지 않더라도).
두 번째 foreach 루프에서 $에 있는 요소의 값은 a가 인쇄됩니다. 그러나 $a[3]은 이제 참조 변수이므로 해당 값은 $v의 값에 따라 변경됩니다. 세 번째 반복에서 $v에 'two' 값이 할당되면 $a[3]도 'two'가 됩니다.
결과적으로 마지막 반복에서 $v(여전히 $a를 가리킴) [3]) 값은 'two'이고 'two'가 인쇄됩니다. 이는 직관적으로 예상할 수 있는 '3'을 인쇄하는 대신 마지막 반복에서 '2'가 반복되는 이유를 설명합니다.
위 내용은 참조에 의한 전달(&)을 사용하는 PHP foreach가 배열 요소를 예기치 않게 변경하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!