現在有這麼兩個類,department部門類、employee員工類:
//部門類
class
department
function
addemployee
(employee $e)被分配到中去";
}}//員工類
class
employee
function
getname()}
//應用:
$lsgo = new department('lsgo實驗室');
$e1 = new employee("小錦");
$e2 = new employee("小豬");
$lsgo->addemployee($e1);
$lsgo->addemployee($e2);
好了,現在lsgo實驗室已經有兩個部員了,現在我想把全部的部員都列出來,就是用迴圈來獲取部門的每個員工的詳情。
在這裡我們用php中的spl標準庫提供的迭代器來實現。
《大話設計模式》中如是說:
迭代器模式:迭代器模式是遍歷集合的成熟模式,迭代器模式的關鍵是將遍歷集合的任務交給乙個叫做迭代器的物件,它的工作時遍歷並選擇序列中的物件,而客戶端程式員不必知道或關心該集合序列底層的結構。
迭代器模式的作用簡而言之:是使所有複雜資料結構的元件都可以使用迴圈來訪問
假如我們的物件要實現迭代,我們使這個類實現 iterator(spl標準庫提供),這是乙個迭代器介面,為了實現該介面,我們必須實現以下方法:
current(),該函式返回當前資料項
key(),該函式返回當前資料項的鍵或者該項在列表中的位置
next(),該函式使資料項的鍵或者位置前移
rewind(),該函式重置鍵值或者位置
valid(),該函式返回 bool 值,表明當前鍵或者位置是否指向資料值
實現了 iterator 介面和規定的方法後,php就能夠知道該類型別的物件需要迭代。
我們使用這種方式重構 department 類:
class
department
implements
iterator
function
addemployee
(employee $e)
被分配到中去";
}//實現 iterator 介面要求實現的方法
function
current
()
function
key()
function
next
()
function
rewind
()
function
valid
()
}//employee 類同前
//應用:
$lsgo = new department('lsgo實驗室');
$e1 = new employee("小錦");
$e2 = new employee("小豬");
$lsgo->addemployee($e1);
$lsgo->addemployee($e2);
echo
"lsgo實驗室部員情況:";
//這裡其實遍歷的$_employee
foreach($lsgo
as$val)";
}
附加:
假如現在我們想要知道該部門有幾個員工,如果是陣列的話,乙個 count() 函式就 ok 了,那麼我們能不能像上面那樣把物件當作陣列來處理?spl標準庫中提供了 countable 介面供我們使用:
class
department
implements
iterator,countable
}//應用:
echo
"員工數量:";
echo count($lsgo);
本部落格參考自《深入理解php高階技巧、物件導向與核心技術》 SPL迭代器之ArrayIterator
迭代器 通過某種統一的方式遍歷鍊錶或者陣列中的元素的過程叫做迭代遍歷,而這種統一的遍歷工具稱為迭代器。spl迭代器之arrayiterator fruits array orange orange value grape grape value plum plum value print r fru...
PHP實現迭代器
不多說,對於php的新手來說,學習到了。迭代器的公用介面 inte ce newiterator 書目的迭代器,實現newiterator介面 class bookiterator implements newiterator else public function next public fun...
PHP設計模式 迭代器模式
web開發筆記 www.chhua.com 每日練習 php設計模式 迭代器模式 呵呵,迭代器模式是php開發中非常有用的乙個設計模式,其主要的應用範圍如下 一 使用返回迭代器的包或庫時 如php5中的spl迭代器 二 無法在一次的呼叫獲取容器的所有元素時 三 要處理數量巨大的無素時 資料庫中的表以...