PHP 'foreach'는 실제로 어떻게 작동하나요?
PHP의 Foreach는 세 가지 유형의 값(배열, 일반 개체, 개체)에 대한 반복을 지원합니다. 횡단 가능한 객체.
배열 및 객체 반복:
배열과 객체의 경우 반복 메커니즘이 더 복잡합니다. PHP 배열은 실제로 삽입 순서에 따라 순회되는 순서가 지정된 사전입니다. 일반 객체에 대한 반복은 객체 속성도 사전으로 저장되므로 배열에 대한 반복과 유사합니다.
반복 중에는 내부 배열 포인터가 직접 사용되지 않습니다. 대신 현재 요소를 추적하기 위해 HashPointer가 사용됩니다. 루프 본문이 실행된 후 HashPointer가 복원되지만 요소가 여전히 존재하는 경우에만 가능합니다. 그렇지 않으면 현재 배열 포인터가 사용됩니다.
배열이 참조가 아니고 참조 카운트가 1보다 큰 경우 반복 전에 복제됩니다. 이러한 복제는 IAP 변경 사항이 원본 어레이로 유출되는 것을 방지하기 위해 수행됩니다.
반복 중 수정:
PHP는 반복 중 수정을 허용하므로 일부 혼란스러운 동작이 발생할 수 있습니다. . 반복 중에 요소가 제거되면 HashPointer 백업/복원 메커니즘이 성공한 경우에만 HashPointer가 다음 요소로 진행됩니다. 실패하면 현재 배열 포인터(배열 끝에 있음)가 대신 사용됩니다.
중첩 루프도 foreach의 동작에 영향을 미칠 수 있습니다. 외부 루프의 현재 요소가 제거되면 HashPointer가 복원에 실패하므로 첫 번째 반복 후 외부 루프가 중지됩니다.
PHP 7 변경 사항:
PHP 7에서는 foreach 반복에 몇 가지 변경 사항이 도입되었습니다.
위 내용은 PHP의 'foreach' 루프는 내부적으로 어떻게 작동하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!