1. 概念の紹介
1. イテレーター パターン: 内部実装を知らずに集合オブジェクトの内部要素を走査します。
2. 従来のプログラミング パターンと比較して、イテレータ パターンは要素を横断するために必要な操作を隠すことができます。
3. ここで紹介するイテレーターはPHP SPLでIterator
を実装する必要があり、5つのメソッド(current、next、valid、rewid、key)を実装する必要があります
2. コードの表示
<code><span>namespace</span><span>brave</span><span>class</span><span>AllUser</span><span>implements</span> \<span>Iterator</span> { //所有<span>user</span>的<span>id</span><span>protected</span> $<span>ids</span>; <span>//保存数据库查询的对象,如果有就不需要在次查询了,可使用注册模式</span><span>protected</span><span>$data</span> = <span>array</span>(); <span>//表示迭代器当前的位置</span><span>protected</span><span>$index</span>; <span><span>function</span><span>__construct</span><span>()</span> {</span><span>$db</span> = Factory::getDatabase(); <span>$result</span> = <span>$db</span>->query(<span>"select id from user"</span>); <span>$this</span>->ids = <span>$result</span>->fetch_all(MYSQLI_ASSOC); } <span>//获取当前用户对象</span><span><span>function</span><span>current</span><span>()</span> {</span><span>$id</span> = <span>$this</span>->ids[<span>$this</span>->index][<span>'id'</span>]; <span>return</span> Factory::getUser(<span>$id</span>); } <span>//进入下一个索引</span><span><span>function</span><span>next</span><span>()</span> {</span><span>$this</span>->index ++; } <span>//检查当前是否有数据</span><span><span>function</span><span>valid</span><span>()</span> {</span><span>return</span><span>$this</span>->index < count(<span>$this</span>->ids); } <span>//使当前的指针回到开始位置</span><span><span>function</span><span>rewind</span><span>()</span> {</span><span>$this</span>->index = <span>0</span>; } <span>//获取当前的索引值</span><span><span>function</span><span>key</span><span>()</span> {</span><span>return</span><span>$this</span>->index; } }</code>
以上、PHP設計パターンのイテレータパターンをその側面も含めて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。
🎜