php迭代器作用,PHP迭代器介绍
迭代器有一個簡單且常見的接口:
function Iterator($array) //構(gòu)造函數(shù)。使需要遍歷的數(shù)組作為一個參數(shù)
function reset() //設(shè)置內(nèi)部指針指向第一個元素
function end() //設(shè)置內(nèi)部指針指向最后一個元素
function seek($position) //設(shè)置內(nèi)部指針指向一個指定的元素
function next() //返回后一個元素
function previous() //返回前一個元素
?>
通過此接口可在任何時間、任何地點(diǎn)及任何方法輕輕松松執(zhí)行日常事務(wù)(例如數(shù)組遍歷)。相對于PHP本身的數(shù)組函數(shù),一大優(yōu)勢在于有了一個為所有數(shù)組任務(wù)工作的接口,避免了這類情況:一段代碼里用foreach()構(gòu)造,而另外一段用list和each的組合,然后還有其他地方頻繁使用next()和perv();另一個優(yōu)勢是現(xiàn)在可以簡單的定位于一個確定的元素并且可以從這里開始任何方式的遍歷。
示例代碼:
< ?php
$iterator = new Iterator($array);
while ($elem = $iterator->next()) { //遍歷數(shù)組
echo $elem;
}
$iterator->end(); //反序便利
while ($elem = $iterator->previous()) {
echo $elem;
}
$iterator->seek(5); //從第五元素開始遍歷
while ($elem = $iterator->next()) {
echo $elem;
}
?>
此外,可通過唯一的接口存取所有數(shù)組,另一個重要優(yōu)勢是迭代器的對象結(jié)構(gòu)容許你輕松擴(kuò)展它的功能。
對象迭代器接口
對象迭代器的代碼十分簡單:
class ObjectIterator extends Iterator {
var $_objectName;
/**
* 構(gòu)造函數(shù)
* 調(diào)用初始化方法(參考Iterator::_initialize())
* 做一些特殊的配置
* @參數(shù)數(shù)組 $array 要遍歷的對象id的數(shù)組
* @參數(shù)字符串 $objectName 要被創(chuàng)建的對象的類
*/
function ObjectIterator($array, $objectName) {
$this->_initialize($array);
$this->_objectName = $objectName;
}
/**
* 用給出的id返回對象
* @參數(shù)對象 $id 標(biāo)示一個對象
* @返回對象 集合里的下一個對象
* @存取 私有
*/
function _fetchObject($id) {
return new $this->_objectName($id);
}
}
?>
類成員$_objectName代表對象所屬的類它必須被next()和pervious()方法返回。構(gòu)造函數(shù)設(shè)置內(nèi)部變量并且調(diào)用初始化函數(shù)(已在迭代器類定義)。最重要的事情是_fetchObject()函數(shù)封裝了對象創(chuàng)建的代碼,它被next()和pervious()方法調(diào)用并且用對象的id作為參數(shù)),所有的對象創(chuàng)建代碼都集中在這里,更容易改變和擴(kuò)展。
這是創(chuàng)建新的一類迭代器的方法:第一、制作構(gòu)造函數(shù)(有一個數(shù)組作為參數(shù)),調(diào)用從迭代器類_initialize()函數(shù);第二、重載 _fetchObject方法去執(zhí)行任何對象操作。
總結(jié)
以上是生活随笔為你收集整理的php迭代器作用,PHP迭代器介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: graphicsmagick im4ja
- 下一篇: php7和php8内核有区别吗,不要在P