PHP中的Iterator迭代對象屬性詳解
前言
foreach用法和之前的數(shù)組遍歷是一樣的,只不過這里遍歷的key是屬性名,value是屬性值。在類外部遍歷時,只能遍歷到public屬性的,因為其它的都是受保護的,類外部不可見。
class HardDiskDrive { public $brand; public $color; public $cpu; public $workState; protected $memory; protected $hardDisk; private $price; public function __construct($brand, $color, $cpu, $workState, $memory, $hardDisk, $price) { $this->brand = $brand; $this->color = $color; $this->cpu = $cpu; $this->workState = $workState; $this->memory = $memory; $this->hardDisk = $hardDisk; $this->price = $price; } } $hardDiskDrive = new HardDiskDrive('希捷', 'silver', 'tencent', 'well', '1T', 'hard', '$456'); foreach ($hardDiskDrive as $property => $value) { var_dump($property, $value); echo '<br>'; }
輸出結果為:
string(5) "brand" string(6) "希捷"
string(5) "color" string(6) "silver"
string(3) "cpu" string(7) "tencent"
string(9) "workState" string(4) "well"
通過輸出結果我們也可以看得出來常規(guī)遍歷是無法訪問受保護的屬性的。
如果我們想遍歷出對象的所有屬性,就需要控制foreach的行為,就需要給類對象,提供更多的功能,需要繼承自Iterator的接口:
該接口,實現(xiàn)了foreach需要的每個操作。foreach的執(zhí)行流程如下圖:
看圖例中,foreach中有幾個關鍵步驟:5個。
而Iterator迭代器中所要求的實現(xiàn)的5個方法,就是用來幫助foreach,實現(xiàn)在遍歷對象時的5個關鍵步驟:
當foreach去遍歷對象時, 如果發(fā)現(xiàn)對象實現(xiàn)了Ierator接口, 則執(zhí)行以上5個步驟時, 不是foreach的默認行為, 而是調用對象的對應方法即可:
示例代碼:
class Team implements Iterator { //private $name = 'itbsl'; //private $age = 25; //private $hobby = 'fishing'; private $info = ['itbsl', 25, 'fishing']; public function rewind() { reset($this->info); //重置數(shù)組指針 } public function valid() { //如果為null,表示沒有元素,返回false //如果不為null,返回true return !is_null(key($this->info)); } public function current() { return current($this->info); } public function key() { return key($this->info); } public function next() { return next($this->info); } } $team = new Team(); foreach ($team as $property => $value) { var_dump($property, $value); echo '<br>'; }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
php function用法如何遞歸及return和echo區(qū)別
這篇文章主要介紹了php function用法如何遞歸及return和echo區(qū)別,需要的朋友可以參考下2014-03-03