>  기사  >  백엔드 개발  >  PHP 소스 코드 24에 대한 간략한 토론: 반복자 구현에서 값이 false일 때 반복을 완료할 수 없는 이유 분석

PHP 소스 코드 24에 대한 간략한 토론: 반복자 구현에서 값이 false일 때 반복을 완료할 수 없는 이유 분석

不言
不言원래의
2018-06-28 17:57:031315검색

이 기사에서는 Iterator 구현에서 값이 false인 경우 반복을 완료할 수 없는 이유에 대한 분석을 주로 소개합니다. 이는 특정 참조 값을 가지며 이제 필요한 모든 친구에게 공유됩니다. 🎜🎜#

PHP 소스 코드 24에 대한 간략한 토론: 반복자 구현에서 값이 false일 때 반복을 완료할 수 없는 이유 분석

간단한 항목에 대한 기사가 있습니다. 반복자 구현 Yii 프레임워크에는 여기에 문제가 남아 있습니다. 반복 값에 false가 포함되면 이유는 무엇입니까?

Brother Bird의 아이디어를 따르고 아래와 같이 Zend/zend_vm_execute.h 파일의 8131행에서 관련 단서를 찾으세요.

 /*  */
 if (!iter || (iter->index > 0 && iter->funcs->valid(iter TSRMLS_CC) == FAILURE)) {
 /* reached end of iteration */
 if (EG(exception)) {
 array->refcount--;zval_ptr_dtor(&array);ZEND_VM_NEXT_OPCODE();}
 ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);}

구현된 간단한 반복자의 경우 iter-> ;funcs-> ;valid(iter TSRMLS_CC) 메소드는 valid() 메소드를 호출하며

우리의 값이 false인 경우 current를 통해 반환된 값은 false입니다. 이때 foreach를 통해 액세스하면 순회가 중단됩니다. 여기에서 프로그램은 이 루프 대신 다음 코드를 계속 실행합니다.

Solution

배열의 키와 값을 별도로 처리
valid() 에서 키를 작동 value 대신 rewind(), next() 메소드
현재의 값만 반환
예: 기사의 반복자의 간단한 구현 및 Yii 프레임워크의 Yii 프레임워크의 반복자 구현 구현 of CMapIterator

위 내용은 이 글의 전체 내용입니다. 더 많은 관련 내용을 보시려면 PHP 중국어 웹사이트를 주목해주세요!

관련 권장 사항:

PHP 소스 코드 23에 대한 간단한 이야기: urlencode 함수 정보

PHP 소스 코드 22에 대한 간략한 토론: array_splice 함수에 대하여

위 내용은 PHP 소스 코드 24에 대한 간략한 토론: 반복자 구현에서 값이 false일 때 반복을 완료할 수 없는 이유 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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