1. 개념 소개
1. 반복자 패턴: 내부 구현을 모르고 집계 개체의 내부 요소를 탐색합니다.
2. 기존 프로그래밍 패턴과 비교하여 반복자 패턴은 요소를 순회하는 데 필요한 작업을 숨길 수 있습니다.
3. 여기서 소개하는 Iterator는 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>
3. 실행코드
<code><span>//迭代器模式实例</span><span>$users</span> = <span>new</span> AllUser(); <span>foreach</span> (<span>$users</span><span>as</span><span>$user</span>) { var_dump(<span>$user</span>); <span>echo</span><span>'<hr>'</span>; }</code>
저작권표시: 이 글은 해당 블로거의 원본 글이므로, 블로거의 허락 없이 복제할 수 없습니다.
위에서는 PHP 디자인 패턴의 반복자 패턴을 그 측면을 포함하여 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.