Dieser Artikel stellt hauptsächlich die Analyse der Gründe vor, warum die Iteration nicht abgeschlossen werden kann, wenn der Wert in der Iteratorimplementierung falsch ist. Jetzt können Freunde in Not darauf zurückgreifen Sprechen Sie kurz über den PHP-Quellcode 24: Analyse der Gründe, warum die Iteration nicht abgeschlossen werden kann, wenn der Wert in der Iterator-Implementierung falsch ist
Im vorherigen Artikel gibt es einen Artikel über die einfache Implementierung des Iterators und des Yii-Frameworks ist eine einfache Iterator-Implementierung. Hier bleibt ein Problem bestehen. Wenn der Iterationswert false enthält, endet die foreach-Schleife an dieser Stelle.
Folgen Sie der Idee von Brother Bird und finden Sie relevante Hinweise in Zeile 8131 der Datei Zend/zend_vm_execute.h, wie im folgenden Code gezeigt:/* */ 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);}
Wenn unser Wert falsch ist, ist der über current zurückgegebene Wert falsch, und wenn über foreach darauf zugegriffen wird, wird die Durchquerung hier unterbrochen, das Programm wird fortgesetzt um den folgenden Code anstelle dieser Schleife auszuführen
Lösung
Verarbeiten Sie den Schlüssel und den Wert im Array separatIn den Methoden valid(), rewind(), next() Bedienen Sie den Schlüssel anstelle des Werts
und nur Rückgabewert
im Strom, wie die einfache Implementierung von Iterator im Artikel und die Implementierung von Iterator im Yii-Framework, die Implementierung von CMapIterator im Yii-Framework
und höher. Das ist das Ganze Der Inhalt dieses Artikels wird für alle hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Eine kurze Diskussion des PHP-Quellcodes 23: Über die URL-Code-FunktionEine kurze Beschreibung Diskussion des PHP-Quellcodes 23 2: Über die Funktion array_spliceDas obige ist der detaillierte Inhalt vonEine kurze Diskussion zum PHP-Quellcode 24: Analyse der Gründe, warum die Iteration nicht abgeschlossen werden kann, wenn der Wert in der Iteratorimplementierung falsch ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!