日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

php遍歷對象的方法

瀏覽:128日期:2022-09-07 15:09:39

對于php來說,foreach是非常方便好用的一個語法,幾乎對于每一個PHPer它都是日常接觸最多的請求之一。那么對象是否能通過foreach來遍歷呢?

答案是肯定的,但是有個條件,那就是對象的遍歷只能獲得它的公共屬性。

// 普通遍歷class A{ public $a1 = ’1’; public $a2 = ’2’; public $a3 = ’3’; private $a4 = ’4’; protected $a5 = ’5’; public $a6 = ’6’; public function test() {echo ’test’; }}$a = new A();foreach ($a as $k => $v) { echo $k, ’===’, $v, PHP_EOL;}// a1===1// a2===2// a3===3// a6===6

不管是方法還是受保護或者私有的變量,都無法遍歷出來。只有公共的屬性才能被遍歷出來。其實,我們之前在講設計模式時講過的迭代器模式就是專門用來進行對象遍歷的,而且PHP已經為我們準備好了相關的接口,我們只需要去實現這個接口就可以完成迭代器模式的創建了。具體的內容可以參考之前的設計模式系列文章:PHP設計模式之迭代器模式

// 實現迭代器接口class B implements Iterator{ private $var = []; public function __construct($array) {if (is_array($array)) { $this->var = $array;} } public function rewind() {echo 'rewindingn';reset($this->var); } public function current() {$var = current($this->var);echo 'current: $varn';return $var; } public function key() {$var = key($this->var);echo 'key: $varn';return $var; } public function next() {$var = next($this->var);echo 'next: $varn';return $var; } public function valid() {$var = $this->current() !== false;echo 'valid: {$var}n';return $var; }}$b = new B([1, 2, 3, 4]);foreach ($b as $k => $v) { echo $k, ’===’, $v, PHP_EOL;}// rewinding// current: 1// valid: 1// current: 1// key: 0// 0===1// next: 2// current: 2// valid: 1// current: 2// key: 1// 1===2// next: 3// current: 3// valid: 1// current: 3// key: 2// 2===3// next: 4// current: 4// valid: 1// current: 4// key: 3// 3===4// next:// current:// valid:

假如今天的文章只是講之前講過的迭代器模式,那就太沒意思了,所以,咱們還要來學習一個更有意思的應用。那就是讓對象可以像數組一樣進行操作。這個其實也是使用PHP早已為我們準備好的一個接口:ArrayAccess。

// 讓類可以像數組一樣操作class C implements ArrayAccess, IteratorAggregate{ private $container = []; public function __construct() {$this->container = [ 'one' => 1, 'two' => 2, 'three' => 3,]; } public function offsetSet($offset, $value) {if (is_null($offset)) { $this->container[] = $value;} else { $this->container[$offset] = $value;} } public function offsetExists($offset) {return isset($this->container[$offset]); } public function offsetUnset($offset) {unset($this->container[$offset]); } public function offsetGet($offset) {return isset($this->container[$offset]) ? $this->container[$offset] : null; } public function getIterator() {return new B($this->container); }}$c = new C();var_dump($c);$c[’four’] = 4;var_dump($c);$c[] = 5;$c[] = 6;var_dump($c);foreach($c as $k=>$v){ echo $k, ’===’, $v, PHP_EOL;}// rewinding// current: 1// valid: 1// current: 1// key: one// one===1// next: 2// current: 2// valid: 1// current: 2// key: two// two===2// next: 3// current: 3// valid: 1// current: 3// key: three// three===3// next: 4// current: 4// valid: 1// current: 4// key: four// four===4// next: 5// current: 5// valid: 1// current: 5// key: 0// 0===5// next: 6// current: 6// valid: 1// current: 6// key: 1// 1===6// next: // current: // valid:

這個接口需要我們實現四個方法:

offsetSet($offset, $value),根據偏移量設置值 offsetExists($offset),根據偏移量確定是否存在內容 offsetUnset($offset),根據偏移量刪除內容 offsetGet($offset),根據依稀量獲取內容

這里的偏移量就是我們常說的下標。通過實現這四個方法,我們就可以像操作數組一樣的操作對象。當然,日常開發中我們可能并不會很經常的使用包括迭代器在內的這些對象遍歷的能力。通常我們會直接去將對象轉換成數組 (array) obj 來進行下一步的操作。不過,在java中,特別是JavaBean中會經常在類的內部有一個 List 為自己的對象來表示自身的集合狀態。通過對比,我們發現PHP也完全可以實現這樣的能力,而且使用迭代器和 ArrayAccess 接口還能夠更方便的實現類似的能力。這是非常有用的一種知識擴展,或許下一個項目中你就能運用上這些能力哦!

測試代碼: github.com/zhangyue050…

以上就是php遍歷對象的方法的詳細內容,更多關于php遍歷對象的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本亚洲视频| 快she精品国产999| 日韩国产精品久久久久久亚洲| 亚洲女同一区| 精品日韩一区| 日韩成人a**站| 国产盗摄——sm在线视频| 久久av网址| 国产精品成人a在线观看| 欧美激情aⅴ一区二区三区| 欧美激情 亚洲a∨综合| 精品国产一区二区三区av片| 日产精品一区二区| 亚洲精品一二三区区别| 亚洲主播在线| 日韩国产精品久久久| 久久丁香四色| 久久精品主播| 亚洲永久精品唐人导航网址| 免费在线观看一区二区三区| 日韩高清中文字幕一区| 欧美激情久久久久久久久久久| 国产在视频一区二区三区吞精| 国产成人精品一区二区三区在线| 激情欧美日韩一区| 亚洲一级大片| 国产aⅴ精品一区二区三区久久| 尹人成人综合网| 亚洲精品中文字幕99999| 麻豆一区二区三区| 亚洲香蕉网站| 国产欧美另类| 狠狠干成人综合网| 国产精品a久久久久| 99久久夜色精品国产亚洲狼| 亚洲人成在线影院| 亚洲特级毛片| 麻豆国产91在线播放| 亚洲黄页一区| 日韩成人精品一区二区| 欧美综合国产| 日韩欧美一区二区三区免费看| 亚久久调教视频| 美女网站一区| 国产精品99视频| 欧美亚洲专区| 久久亚洲图片| 精品一区毛片| 日韩国产激情| 91嫩草精品| 亚洲bt欧美bt精品777| 在线精品视频在线观看高清| 国产一区二区久久久久| 里番精品3d一二三区| 日本不卡视频在线| 视频一区二区三区在线| 欧美成人国产| 久久九九国产| 欧美日韩视频免费观看| 精品久久在线| 91亚洲自偷观看高清| 美女久久精品| 亚洲黄色中文字幕| 日韩高清中文字幕一区二区| 久久99久久人婷婷精品综合| 国产精品一区二区av日韩在线| 97精品国产99久久久久久免费| 深夜日韩欧美| 国产另类在线| 成午夜精品一区二区三区软件| 精品欠久久久中文字幕加勒比| 国产午夜精品一区在线观看| 欧美日韩a区| 黄色欧美在线| 国产精品自拍区| 久久国产精品免费一区二区三区| 亚洲精品美女91| 日韩国产精品久久久久久亚洲| 欧美日本久久| 国产精品sss在线观看av| 国产999精品在线观看| 久久三级视频| 日日夜夜免费精品| 另类综合日韩欧美亚洲| 激情久久久久久久| 水野朝阳av一区二区三区| 亚洲香蕉久久| 免费日韩成人| 成人综合一区| 在线精品亚洲| 国产亚洲在线| 久久99偷拍| 欧美a级片一区| 爽爽淫人综合网网站| 91伊人久久| 国产精品22p| av亚洲免费| 国产精品主播在线观看| 精品中国亚洲| 玖玖精品视频| 精品国产黄a∨片高清在线| 蜜桃伊人久久| 欧美亚洲在线日韩| 久久av国产紧身裤| 在线国产精品一区| 免费高潮视频95在线观看网站| 日韩精品国产精品| 亚洲性色视频| 樱桃视频成人在线观看| 日本亚洲欧洲无免费码在线| 日本精品影院| 国产在线一区不卡| 青草国产精品| 噜噜噜久久亚洲精品国产品小说| 精品视频91| 国产另类在线| 欧美影院视频| 日韩一区二区三区四区五区| 欧美日韩国产传媒| 亚洲国内欧美| 亚洲午夜视频| 免费欧美一区| 国产精品88久久久久久| 激情婷婷欧美| 国产综合色区在线观看| 免费在线播放第一区高清av| 天堂va在线高清一区| 蜜臀av一区二区在线免费观看| 蜜臀久久99精品久久一区二区| 久久久久亚洲| 国产综合色产| 99pao成人国产永久免费视频 | 99国产精品99久久久久久粉嫩| 色婷婷精品视频| 久久精品国产www456c0m| 精品一区毛片| 日韩中文欧美在线| 国产精品毛片| 亚洲精品九九| 国产精品久久乐| 四季av一区二区凹凸精品| 色在线视频观看| 午夜日本精品| 亚洲精品自拍| 国产精选一区| 人在线成免费视频| 亚洲一区二区三区高清不卡| 日韩制服丝袜先锋影音| 青青草91视频| 欧美久久天堂| 伊人www22综合色| 国产精品白丝久久av网站| 国产一区 二区| 国产精品v亚洲精品v日韩精品| 国产精品国产一区| 久久一级电影| 欧美有码在线| 伊人久久大香线蕉av不卡| 日韩欧美三区| 给我免费播放日韩视频| 在线观看一区| 亚洲高清久久| 麻豆中文一区二区| 日韩精品一级中文字幕精品视频免费观看| 日本欧美一区二区| 久久在线免费| 精品国产乱码久久久| 不卡av一区二区| 欧美日韩亚洲一区二区三区在线| 精品资源在线| 日韩高清中文字幕一区| 久久国产日本精品| 日韩avvvv在线播放| sm久久捆绑调教精品一区| 精品国产aⅴ| 久久久久久夜| 99国产精品99久久久久久粉嫩| 视频一区在线播放| 麻豆成全视频免费观看在线看| 美女福利一区二区三区| 蜜桃视频第一区免费观看| 国产精品国码视频| 国产精品黑丝在线播放| 亚洲最新av| 美女福利一区二区三区| 日韩有码av| 亚洲一级高清| 日韩伦理福利| 国产精选在线| 福利在线免费视频| 久久午夜影院| 精品亚洲二区| 国产日韩欧美中文在线| 影音先锋久久精品| 蜜桃视频第一区免费观看| 999在线观看精品免费不卡网站| 欧美国产91| 国产精品毛片在线| 欧美成人亚洲| 国产一区二区精品|