<?php
/*
可在內部迭代自己的外部迭代器或類的接口。
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 )
}
*/
class myIterator implements Iterator{
private $position = 0 ;
private $array = array(
"firstelement" ,
"secondelement" ,
"lastelement" ,
);
public function __construct () {
$this -> position = 0 ;
}
function rewind () {
var_dump ( __METHOD__ );
$this -> position = 0 ;
}
function current () {
var_dump ( __METHOD__ );
return $this -> array [ $this -> position ];
}
function key () {
var_dump ( __METHOD__ );
return $this -> position ;
}
function next () {
var_dump ( __METHOD__ );
++ $this -> position ;
}
function valid () {
var_dump ( __METHOD__ );
return isset( $this -> array [ $this -> position ]);
}
}
$it = new myIterator ;
foreach( $it as $key => $value ) {
print_r( $key.'/'.$value );
echo "<br />" ;
}
/*
foreach循環第一次執行前,先調用rewind,返回到迭代器的第一個元素,開始位置也可控制
第二步執行valid檢查當前位置是否有效,有效繼續往下執行,無效則循環停止
第三步執行current返回當前元素的值
第四步執行key 返回當前元素的鍵
第五步:第一次循環結束後執行next向前移動到下一個元素開始下一輪的循環(緊接著跳過rewind,進行valid檢測當前位置)
往下next,valid,current,key循環依次執行,直到valid到無效的位置
*/
內容是自己總結的,有不對的地方,希望能指出!
更多內容後續補充...