成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

php遍歷對象的方法

瀏覽:99日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
99久久久精品| 婷婷成人激情在线网| 在线电影国产精品| 久久精品一区二区| 亚洲女厕所小便bbb| 激情综合色播激情啊| 欧美精选一区| 欧美少妇bbb| 亚洲欧洲精品成人久久奇米网| 免费精品视频在线| 欧美色123| 欧美在线观看一区二区| 国产欧美日产一区| 日韩成人精品在线| 你懂的视频一区二区| 色婷婷久久99综合精品jk白丝 | 欧美大片免费久久精品三p| 亚洲精品综合在线| 成人激情小说网站| 可以看av的网站久久看| 国产日韩欧美精品电影三级在线| 懂色中文一区二区在线播放| 麻豆精品91| 欧美激情在线看| 国产毛片一区二区| 亚洲一区二区三区免费在线观看 | 欧美一级黄色片| 玉足女爽爽91| 国产精品久久一区二区三区| 久久精品人人做人人爽人人| 欧美fxxxxxx另类| 亚洲视频资源在线| 欧美ab在线视频| 国产精品理伦片| 99这里都是精品| 欧美性色黄大片| 国产一区二区看久久| 精品不卡在线视频| 国产一区二区三区在线观看精品| 欧美一级淫片007| 美女在线观看视频一区二区| 亚洲区一区二| 久久久一区二区三区| 国内精品免费**视频| 日韩欧美区一区二| 欧美日韩亚洲一区二区三区在线观看| 亚洲欧美日韩中文播放| 91九色02白丝porn| 亚洲一区二区三区中文字幕| 国产精品xvideos88| 日韩欧美一级精品久久| 91在线精品一区二区三区| 中文字幕综合网| 色网综合在线观看| 成人免费视频app| 91麻豆精品91久久久久久清纯 | 欧美美女直播网站| 99r国产精品| 亚洲最色的网站| 在线播放日韩| 日本一区二区成人| 国产亚洲激情| 国产一区二区三区久久悠悠色av| xfplay精品久久| 成人午夜碰碰视频| **网站欧美大片在线观看| 色av综合在线| 91美女在线看| 国产网站一区二区三区| 一区二区精品在线观看| 亚洲人妖av一区二区| 一本到不卡免费一区二区| 成人免费av网站| 亚洲最新视频在线观看| 欧美一级日韩一级| 亚洲精品精选| 国产成人在线看| 538在线一区二区精品国产| 91亚洲午夜精品久久久久久| 亚洲国产精品人人做人人爽| 国产久一道中文一区| 国产乱国产乱300精品| 制服.丝袜.亚洲.中文.综合| 欧美精品v日韩精品v国产精品| 婷婷丁香久久五月婷婷| 精品国产一区二区在线观看| 免费久久久一本精品久久区| 亚瑟在线精品视频| 久久精品成人| av一区二区三区四区| 亚洲成人黄色小说| 国产色综合一区| 欧美视频日韩视频在线观看| 亚洲午夜一区| 亚洲精品乱码久久久久久日本蜜臀| 欧美在线看片a免费观看| 国产精品成人一区二区网站软件| 伦理电影国产精品| 在线观看91精品国产麻豆| 国内精品久久久久久久影视麻豆| 久久99精品久久久久婷婷| 91精品欧美综合在线观看最新| 亚洲国产第一| 国产成人精品影视| 亚洲.国产.中文慕字在线| 国产亚洲一区二区在线观看| 欧美乱妇15p| 免费试看一区| 欧美福利在线| 国产精品夜夜嗨| 亚洲国产精品久久人人爱| 国产视频不卡一区| 欧美精品视频www在线观看| 国产精品一区在线播放| 不卡在线视频中文字幕| 日韩电影在线观看一区| 中文字幕亚洲一区二区va在线| 日韩欧美一区二区不卡| 久久深夜福利| 亚洲欧洲另类| 91蝌蚪porny| 国产一区二区精品久久91| 午夜精品福利久久久| 中文字幕一区二区三区不卡| 精品国产99国产精品| 欧美日韩成人综合天天影院| 成人av电影免费在线播放| 日韩在线一区二区三区| 91精品国产色综合久久| 国产一区二区三区奇米久涩| 91麻豆精品在线观看| 国产一区不卡精品| 日韩经典中文字幕一区| 亚洲欧美另类小说| 国产日韩欧美电影| 欧美tk—视频vk| 亚洲精选国产| 毛片不卡一区二区| 亚洲国产一区二区三区青草影视 | 国产精品中文字幕一区二区三区| 五月综合激情婷婷六月色窝| 亚洲乱码中文字幕| 国产精品蜜臀在线观看| 性欧美xxxx大乳国产app| 欧美激情综合色综合啪啪| 北条麻妃一区二区三区| 国产成人一区在线| 国产在线精品一区二区不卡了| 蜜桃视频免费观看一区| 五月天一区二区三区| 亚洲精品成人在线| 中文字幕一区二区5566日韩| 国产欧美日韩另类一区| 久久综合色一综合色88| 精品国产乱码久久久久久闺蜜| 91精品国产免费| 欧美久久久久久蜜桃| 欧美日韩另类一区| 欧美午夜精品理论片a级按摩| 看欧美日韩国产| 色婷婷综合激情| 日本乱人伦aⅴ精品| 一本一道波多野结衣一区二区| 欧美亚洲三级| 91国偷自产一区二区开放时间| 色欲综合视频天天天| 在线观看欧美精品| 欧美在线制服丝袜| 欧美三级日韩三级国产三级| 激情欧美一区| 国色天香一区二区| 亚洲高清123| 亚洲激情在线| 99视频+国产日韩欧美| 国产亚洲欧美一区二区| 国产女优一区| 久久亚洲精选| 欧美亚男人的天堂| 91麻豆精品国产91久久久使用方法 | 色综合一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 婷婷夜色潮精品综合在线| 日韩中文欧美在线| 狠狠色丁香婷综合久久| 国产超碰在线一区| 91视频观看视频| 欧美精品一线| 亚洲精品欧美| 久久久久中文| 欧美日韩成人综合| 日韩欧美黄色影院| 久久婷婷综合激情| 国产精品国产三级国产三级人妇| 亚洲人成精品久久久久久| 亚洲国产视频在线| 人人爽香蕉精品| 国产激情精品久久久第一区二区| 粉嫩av亚洲一区二区图片| 午夜欧美精品| 制服诱惑一区二区|