PHP ソースコード 24 についての簡単な説明: イテレーター実装で値が false の場合に反復を完了できない理由の分析

不言
リリース: 2023-04-02 06:08:01
オリジナル
1211 人が閲覧しました

この記事は、イテレータの実装で値が false の場合に反復が完了できない原因の分析を主に紹介しています。必要な友達はそれを参照できるようになりました。 4: イテレータ実装で値が 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 を通じてアクセスされると、トラバーサルはここで中断され、プログラムは引き続き実行されます。このループの代わりに次のコードを実行します。

解決策

配列内のキーと値を個別に処理します。

valid()、rewind()、next() メソッドで value の代わりに key を操作します
current での戻り値のみ
記事内のイテレータの簡単な実装と Yii フレームワークでのイテレータの実装と Yii フレームワークでの CMapIterator の実装など

上 以上が内容ですこの記事が皆さんの学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

PHP ソース コード 23 についての簡単な説明: urlencode 関数について


概要PHP ソースコードに関するディスカッション 23 2: array_splice 関数について

#

以上がPHP ソースコード 24 についての簡単な説明: イテレーター実装で値が false の場合に反復を完了できない理由の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!