PHP迭代器Iterator介面
介紹
可在內部迭代自己的外部迭代器或類的介面。
1
2
3
4
5
6
7
8
9
10
|
Iterator extends Traversable
{ /* 方法 */
abstract public mixed current(void)
abstract public scalar key(void)
abstract public void next(void)
abstract public void rewind (void )
abstract public boolean valid(void)
} |
舉個例子,定義一個迭代器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
class myIerator implements Iterator
{ protected $position ; //指標
public $arr = [];
public function __construct( array $arr )
{
$info = date ( `Y-m-d H:i:s` ) . ` ` . __METHOD__ . ` Line :` . __LINE__ . " ;
$this ->writeLog( $info );
$this ->arr = $arr ;
return $this ;
}
//獲取當前的值
public function current()
{
$info = date ( `Y-m-d H:i:s` ) . ` ` . __METHOD__ . ` Line :` . __LINE__ . " ;
$this ->writeLog( $info );
return $this ->arr[ $this ->position] ?? null;
}
//將指標移至下一位
public function next()
{
$info = date ( `Y-m-d H:i:s` ) . ` ` . __METHOD__ . ` Line :` . __LINE__ . " ;
$this ->writeLog( $info );
return ++ $this ->position;
}
//返回當前的指標
public function key()
{
$info = date ( `Y-m-d H:i:s` ) . ` ` . __METHOD__ . ` Line :` . __LINE__ . " ;
$this ->writeLog( $info );
return $this ->position;
}
//重置指標
public function rewind ()
{
$info = date ( `Y-m-d H:i:s` ) . ` ` . __METHOD__ . ` Line :` . __LINE__ . " ;
$this ->writeLog( $info );
$this ->position = 0;
}
//檢查當前是否有效
public function valid()
{
$info = date ( `Y-m-d H:i:s` ) . ` ` . __METHOD__ . ` Line :` . __LINE__ . " ;
$this ->writeLog( $info );
return isset( $this ->arr[ $this ->position]);
}
private function writeLog(string $info )
{
error_log ( $info , 3, `./debug.log` );
}
} |
1
2
3
4
5
|
$zhangsan =[ `one` , `two` , `three` , `four` ];
$arr = new myIerator( $zhangsan );
foreach ( $arr as $k => $v ) {
echo "{$k} => {$v} ;
} |
列印結果:
0 => one
1 => two
2 => three
3 => four
檢視呼叫日誌:
2017-11-27 15:56:04 myIerator::__construct Line :16
2017-11-27 15:56:04 myIerator::rewind Line :50 重置指標
2017-11-27 15:56:04 myIerator::valid Line :58 校驗是否有效
2017-11-27 15:56:04 myIerator::current Line :25 獲取當前指標的值
2017-11-27 15:56:04 myIerator::key Line :41 獲取當前指標位置
2017-11-27 15:56:04 myIerator::next Line :33 指標下移一位(進入下一個迴圈)
2017-11-27 15:56:04 myIerator::valid Line :58
2017-11-27 15:56:04 myIerator::current Line :25
2017-11-27 15:56:04 myIerator::key Line :41
2017-11-27 15:56:04 myIerator::next Line :33
2017-11-27 15:56:04 myIerator::valid Line :58
2017-11-27 15:56:04 myIerator::current Line :25
2017-11-27 15:56:04 myIerator::key Line :41
2017-11-27 15:56:04 myIerator::next Line :33
2017-11-27 15:56:04 myIerator::valid Line :58
2017-11-27 15:56:04 myIerator::current Line :25
2017-11-27 15:56:04 myIerator::key Line :41
2017-11-27 15:56:04 myIerator::next Line :33
2017-11-27 15:56:04 myIerator::valid Line :58
//遍歷方式二:
$arr->rewind();
while ($arr->valid()) {
$key = $arr->key();
$value = $arr->current();
echo "{$key} => {$value} ";
$arr->next();
}
相關文章
- Iterator迭代器
- 迭代器 iterator
- 迭代器模式(Iterator)模式
- 【java】【集合】迭代器IteratorJava
- STL之迭代器(iterator)
- Iterator與Iterable(迭代器與可迭代)
- C++ STL迭代器(iterator)C++
- Java基礎Iterator迭代器Java
- Java 集合(2)之 Iterator 迭代器Java
- python黑魔法---迭代器(iterator)Python
- Python學習迭代器(Iterator)Python
- 【ES6基礎】迭代器(iterator)
- PHP遍歷介面Iterator詳解PHP
- c/c++ 標準庫 迭代器(iterator)C++
- 設計模式--迭代器模式Iterator(行為型)設計模式
- C#設計模式系列:迭代器模式(Iterator)C#設計模式
- JAVA設計模式之 迭代器模式【Iterator Pattern】Java設計模式
- PHP 迭代器 (轉)PHP
- JavaScript淺談之迭代器(Iterator) 和for-of迴圈JavaScript
- 集合------集合框架Collection/Iterator迭代器/增強for迴圈框架
- 設計模式的征途—21.迭代器(Iterator)模式設計模式
- Iterator(迭代器)的用法及其背後機制的探究
- 【設計模式基礎】行為模式 - 7 - 迭代器(Iterator)設計模式
- Java中Iterator迭代器的next()方法的新手易錯點。Java
- 使用C# (.NET Core) 實現迭代器設計模式 (Iterator Pattern)C#設計模式
- 切圖崽的自我修養-[ES6] 迭代器Iterator淺析
- es6 快速入門 系列 —— 迭代器 (Iterator) 和 生成器 (Generator)
- 一文徹底搞懂Python可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)的概念Python
- PHP的迭代器和生成器PHP
- java版 SpringCloud分散式微服務雲架構之Java Iterator(迭代器)JavaSpringGCCloud分散式微服務架構
- ??Java開發者的Python快速進修指南:迭代器(Iterator)與生成器JavaPython
- Java中Collection和Iterator介面Java
- PHP 物件迭代PHP物件
- PHP中的 Iterator 與 GeneratorPHP
- Java容器類原始碼分析之Iterator與ListIterator迭代器(基於JDK8)Java原始碼JDK
- 《深入理解ES6》筆記——迭代器(Iterator)和生成器(Generator)(8)筆記
- C++學習隨筆——使用map和迭代器iterator的簡單範例C++
- ConcurrentModificationException,iterator迭代問題[原始碼分析]Exception原始碼