亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP的預定義接口解析

2020-03-22 19:25:40
字體:
來源:轉載
供稿:網友
這篇文章主要整理了PHP之預定義接口,在平時項目過程中比較常用的四個接口:IteratorAggregate(聚合式aggregate迭代器Iterator)、Countable、ArrayAccess、Iterator,需要的朋友可以參考下

在PHP中有好幾個預定義的接口,比較常用的四個接口(IteratorAggregate(聚合式aggregate迭代器Iterator)、Countable、ArrayAccess、Iterator)分別給大家詳細介紹下。

IteratorAggregate(聚合式aggregate迭代器Iterator)接口

IteratorAggregate extends Traversable { abstract html' target='_blank'>public Traversable getIterator(void)}

這個接口實現了一個功能——創建外部迭代器,具體怎么理解呢,當我們使用foreach對對象進行便遍歷的時候,如果沒有繼承IteratorAggregate接口,遍歷的是對象中所有的public屬性(只能是public $var這種形式)。要是繼承了IteratorAggregate,會使用類中實現的getIterator方法返回的對象,這里要注意返回的一定要是一個Traversable對象或者擴展自Traversable的對象,否則會拋出異常

//看個例子class My{ private $_data = [ a = 燕睿濤 , b = yanruitao , c = LULU , public function getIterator() return new ArrayIterator($this- _data);$obj = new My;foreach ($obj as $key = $value) { echo $key = $value/n //輸出結果為空 class My implements IteratorAggregate { private $_data = [ a = 燕睿濤 , b = yanruitao , c = LULU , public function getIterator() return new ArrayIterator($this- _data);$obj = new My;foreach ($obj as $key = $value) { echo $key = $value/n //結果:a = 燕睿濤b = yanruitaoc = LULU

Countable接口

Countable { abstract public int count(void)}

這個接口用于統計對象的數量,具體怎么理解呢,當我們對一個對象調用count的時候,如果函數沒有繼承Countable將一直返回1,如果繼承了Countable會返回所實現的count方法所返回的數字,看看下面的例子:

class CountMe protected $_myCount = 3;  public function count()  return $this- _myCount; $countable = new CountMe(); echo count($countable);//返回1class CountMe implements Countable protected $_myCount = 3;  public function count()  return $this- _myCount; $countable = new CountMe(); echo count($countable); //返回3
abstract public boolean offsetExists(mixed $offset) abstract public mixed offsetGet(mixed $offset) public void offsetSet(mixed $offset, mixed $value) public void offsetUnset(mixed $offset)
//返回3

ArrayAccess接口

ArrayAccess { abstract public boolean offsetExists(mixed $offset) abstract public mixed offsetGet(mixed $offset) public void offsetSet(mixed $offset, mixed $value) public void offsetUnset(mixed $offset)}

這個接口的作用是讓我們可以像訪問數組一樣訪問對象,這個怎么說好呢,我猜其實就是php在詞法分析的時候如果碰到了數組的方式使用對象,就回去對象中查找是否有實現ArrayAccess如果有的話,進行對應的操作(set、unset、isset、get),這樣我們就可以在類里面放置一個array,讓類實現數組方式的基本操作,下面看個例子:

class myObj$obj = new myObj;$obj[ name //Fatal error: Cannot use object of type myObj as array in class myObj implements ArrayAccess  public function offsetSet($offset, $value) echo offsetSet : {$offset} = {$value}/n  public function offsetExists($offset) echo offsetExists : {$offset}/n  public function offsetUnset($offset) echo offsetUnset : {$offset}/n  public function offsetGet($offset) echo offsetGet : {$offset}/n $obj = new myObj;$obj[1] = 燕睿濤 isset($obj[ name unset($obj[ name $obj[ yrt //輸出結果:offsetSet : 1 = 燕睿濤offsetExists : nameoffsetUnset : nameoffsetGet : yrtclass myObj implements ArrayAccess  private $_data = []; public function offsetSet($offset, $value) $this- _data[$offset] = $value; public function offsetExists($offset) return isset($this- _data[$offset]); public function offsetUnset($offset) unset($this- _data[$offset]); public function offsetGet($offset) return $this- _data[$offset];$obj = new myObj;$obj[ yrt ] = 燕睿濤 var_dump($obj[ yrt var_dump(isset($obj[ yrt ]));unset($obj[ yrt var_dump(isset($obj[ yrt ]));var_dump($obj[ yrt //輸出:string(9) 燕睿濤 bool(true)bool(false)Notice: Undefined index: yrt //最后一個會報出Notice

上面的對象只能是基本的數組操作,連遍歷都不行,結合之前的IteratorAggregate可以進行foreach:

class myObj implements ArrayAccess, IteratorAggregateprivate $_data = []; public function getIterator() return new ArrayIterator($this- _data); ......$obj = new myObj;$obj[ yrt ] = 燕睿濤 $obj[1] = 燕睿濤 $obj[ name ] = 燕睿濤 $obj[ age ] = 23;foreach ($obj as $key = $value) { echo {$key} = {$value}/n //輸出:yrt = 燕睿濤1 = 燕睿濤name = 燕睿濤age = 23

Iterator接口:

Iterator extends Traversable { abstract public mixed current(void) abstract public scalar key(void) abstract public void next(void) abstract public void rewind(void) abstract public boolean valid(void)}

可在內部迭代自己的外部迭代器或類的接口,這是官方文檔給出的解釋,看著還是不好理解,其實我感覺這個接口實現的功能和trratorAggregate(文檔:創建外部迭代器接口,接口直接返回一個迭代器)類似,不過這個在類的定義里面自己實現了,看個例子:

class myObj implements Iterator{ private $_data = []; public function __construct(Array $arr) $this- _data = $arr; public function current() return current($this- _data); public function key() return key($this- _data); public function next() next($this- _data); public function rewind() reset($this- _data); public function valid() return $this- key() !== NULL;$t = [ yrt = 燕睿濤 , name = 燕睿濤 , false, 燕睿濤 $obj = new myObj($t);foreach ($obj as $key = $value) { echo {$key} = .var_export($value, true). /n //輸出:yrt = 燕睿濤 name = 燕睿濤 0 = false1 = 燕睿濤 

上面這個參考了鳥哥的一篇文章關于一筆試題(Iterator模式),不過鳥哥的那個判斷valid有點瑕疵,當碰到值北來就是false的時候就會截斷

總結
說了這么多好像還是沒有體會到他們的用處,建議看看Yii2的源碼,源碼里面大量使用了這些東西,看了之后,你會慢慢覺得“哦~好像還真是挺有用的。。。?!?/p>

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

如何通過PHP獲取當前頁面URL函數

php后臺如何避免用戶直接進入的代碼分析

以上就是PHP的預定義接口解析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va欧美va在线观看| 成人激情视频网| 久久69精品久久久久久久电影好| 日韩在线资源网| 7777精品久久久久久| 最好看的2019年中文视频| 亚洲片在线资源| 亚洲成人黄色网| 国产一区二区激情| 国产精品伦子伦免费视频| 国产欧美精品久久久| 亚洲激情电影中文字幕| 亚洲欧美999| 欧美激情乱人伦| 欧美成人亚洲成人日韩成人| 欧美日韩精品中文字幕| 亚洲精品美女免费| 欧美精品久久久久久久久| 黑丝美女久久久| 成人性教育视频在线观看| 亚洲级视频在线观看免费1级| 精品国内亚洲在观看18黄| 92国产精品久久久久首页| www.久久草.com| 国产日韩欧美在线视频观看| 热久久视久久精品18亚洲精品| 日韩欧美中文字幕在线观看| 亚洲有声小说3d| 欧美亚洲在线观看| 欧美精品在线看| 久久五月情影视| 精品中文字幕在线观看| 欧美性极品xxxx娇小| 亚洲va欧美va国产综合久久| 人人做人人澡人人爽欧美| 国产精品福利无圣光在线一区| 久久久91精品| 国产亚洲日本欧美韩国| 国产成人97精品免费看片| 国产精品高清在线| 亚洲欧美国内爽妇网| 国产精品天天狠天天看| 国产精品爽黄69天堂a| 一级做a爰片久久毛片美女图片| 狠狠色香婷婷久久亚洲精品| 欧美激情亚洲精品| 成年无码av片在线| 亚洲第一福利网| 国产午夜精品美女视频明星a级| 国产精品网红福利| 神马国产精品影院av| 日韩成人在线观看| zzjj国产精品一区二区| 久久久久中文字幕| 欧美亚洲成人免费| 一区二区三区国产在线观看| 中文在线资源观看视频网站免费不卡| 日韩中文综合网| 国产精品久久久久久av| 精品成人av一区| 亚洲资源在线看| 欧美激情国产日韩精品一区18| 日本欧美精品在线| 欧美日韩精品在线观看| 亚洲国产高清自拍| 国产精品视频一区国模私拍| 91精品国产91久久久久久不卡| 久久久久久这里只有精品| 国产精品视频中文字幕91| 久久精品亚洲热| 亚洲18私人小影院| 成人情趣片在线观看免费| 日韩高清电影免费观看完整| 欧美猛交免费看| 国产在线不卡精品| 成人久久一区二区三区| 国产精品久久久久av| 97在线视频观看| 国产一区玩具在线观看| 欧美成人激情视频| 亚洲精品美女在线观看播放| 国产精品久久久久久久av电影| 亚洲日本成人女熟在线观看| 91精品国产亚洲| 97久久精品人人澡人人爽缅北| 欧美裸体男粗大视频在线观看| 国产日韩欧美夫妻视频在线观看| 欧美极品欧美精品欧美视频| 欧美高清自拍一区| 久久久www成人免费精品张筱雨| 一本色道久久综合亚洲精品小说| 亚洲毛茸茸少妇高潮呻吟| 91av福利视频| 国产97在线观看| 成人久久精品视频| 在线视频免费一区二区| 欧美精品videossex性护士| 91精品国产色综合久久不卡98| 成人精品一区二区三区| 国产精品夜间视频香蕉| 麻豆一区二区在线观看| 欧美日韩亚洲国产一区| 九九视频这里只有精品| 国产精品自拍小视频| 国产精品日韩在线观看| 欧美极品少妇与黑人| 98精品国产高清在线xxxx天堂| 国产精品久久久精品| 亚洲成人网久久久| 在线一区二区日韩| 国产日产欧美a一级在线| 亚洲大胆人体视频| 精品久久久国产精品999| 国产精品视频在线观看| 日韩在线www| 国产精品欧美日韩久久| 欧美有码在线视频| 亚洲一区www| 久久精品91久久久久久再现| 最新亚洲国产精品| 欧美大片免费观看在线观看网站推荐| 国产在线播放不卡| 久久精品国产久精国产一老狼| 亚洲欧洲一区二区三区久久| 一区二区福利视频| 亚洲美女中文字幕| 国产精品18久久久久久麻辣| 欧美日韩ab片| 久久99青青精品免费观看| 色无极亚洲影院| 欧美一级bbbbb性bbbb喷潮片| 欧美日韩一区二区免费视频| 国产亚洲精品久久久久动| 欧美精品少妇videofree| 51色欧美片视频在线观看| 国产精品高潮在线| 亚洲成avwww人| 成人精品aaaa网站| 亚洲性夜色噜噜噜7777| 欧美黑人视频一区| 久久视频在线观看免费| 国产精品极品美女粉嫩高清在线| 亚洲欧洲高清在线| 51久久精品夜色国产麻豆| 亚洲国产精品久久久久秋霞不卡| 中文字幕成人精品久久不卡| 欧美韩日一区二区| 久久久精品中文字幕| 欧美精品国产精品日韩精品| 中文字幕在线日韩| zzijzzij亚洲日本成熟少妇| 精品视频—区二区三区免费| 96精品视频在线| 久久久精品国产亚洲| 国外成人在线视频| 精品国产91久久久久久| 亚洲福利视频在线| 日韩av免费看网站| 亚洲黄色av女优在线观看| 最近2019中文免费高清视频观看www99| 97在线看福利| 国产剧情久久久久久| 亚洲成人av资源网| 亚洲精品成a人在线观看|