小編給大家分享一下php中Iterator迭代對(duì)象屬性的使用方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
目前創(chuàng)新互聯(lián)建站已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、微山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。foreach用法和之前的數(shù)組遍歷是一樣的,只不過(guò)這里遍歷的key是屬性名,value是屬性值。在類(lèi)外部遍歷時(shí),只能遍歷到public屬性的,因?yàn)槠渌亩际鞘鼙Wo(hù)的,類(lèi)外部不可見(jiàn)。
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 '
'; }
輸出結(jié)果為:
string(5) "brand" string(6) "希捷" string(5) "color" string(6) "silver" string(3) "cpu" string(7) "tencent" string(9) "workState" string(4) "well"
通過(guò)輸出結(jié)果我們也可以看得出來(lái)常規(guī)遍歷是無(wú)法訪問(wèn)受保護(hù)的屬性的。
如果我們想遍歷出對(duì)象的所有屬性,就需要控制foreach的行為,就需要給類(lèi)對(duì)象,提供更多的功能,需要繼承自Iterator的接口:
該接口,實(shí)現(xiàn)了foreach需要的每個(gè)操作。foreach的執(zhí)行流程如下圖:
看圖例中,foreach中有幾個(gè)關(guān)鍵步驟:5個(gè)。
而Iterator迭代器中所要求的實(shí)現(xiàn)的5個(gè)方法,就是用來(lái)幫助foreach,實(shí)現(xiàn)在遍歷對(duì)象時(shí)的5個(gè)關(guān)鍵步驟:
當(dāng)foreach去遍歷對(duì)象時(shí), 如果發(fā)現(xiàn)對(duì)象實(shí)現(xiàn)了Ierator接口, 則執(zhí)行以上5個(gè)步驟時(shí), 不是foreach的默認(rèn)行為, 而是調(diào)用對(duì)象的對(duì)應(yīng)方法即可:
示例代碼:
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,表示沒(méi)有元素,返回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 '
'; }
以上是php中Iterator迭代對(duì)象屬性的使用方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。