在看Yii框架源碼的時候,看到了很是多的Class
去implements
\ArrayAccess
,因而追根溯源讓我看到了我不曾到過的地方,那就是:Predefined Interfaces and Classes
預約義接口
PHP 的預約義接口有這些:php
Traversable
遍歷Iterator
迭代器IteratorAggregate
聚合式迭代器ArrayAccess
數組式訪問Serializable
序列化Closure
Generator
生成器接下來咱們一個一個講:html
Traversable
遍歷他的做用就是判斷某個類是否能被遍歷,可是數組和對象是能夠遍歷的,但他們不屬於Traversable
,判斷的方法就是 instanceof Traversable
數組
Iterator
迭代器Iterator::rewind
返回到迭代器的第一個元素Iterator::valid
檢查當前位置是否有效Iterator::current
返回當前元素Iterator::key
返回當前元素的鍵Iterator::next
向前移動到下一個元素內部的方法和執行順序就是以上順序,網上能夠找到不少例子,這個東西的做用是什麼呢?就是能夠自定義遍歷的具體流程和輸出。閉包
IteratorAggregate
聚合式迭代器IteratorAggregate extends Traversable { /* 方法 */ abstract public getIterator (void) :Traversable }
只有一個方法 getIterator
框架
ArrayAccess
數組式訪問看到這個,我才知道不是全部的對象均可以用 $a['property']
這樣的方式訪問的,若是想以這種方式訪問,就必須implements
ArrayAccess
。他有四個方法:函數
ArrayAccess::offsetExists
— 檢查一個偏移位置是否存在ArrayAccess::offsetGet
— 獲取一個偏移位置的值ArrayAccess::offsetSet
— 設置一個偏移位置的值ArrayAccess::offsetUnset
— 復位一個偏移位置的值Serializable
序列化Serializable::serialize
— 對象的字符串表示Serializable::unserialize
— 構造對象Closure
匿名函數Closure::__construct
— 用於禁止實例化的構造函數Closure::bind
— 複製一個閉包,綁定指定的$this對象和類做用域。Closure::bindTo
— 複製當前閉包對象,綁定指定的$this對象和類做用域。這塊能夠參考 http://www.javashuo.com/article/p-upgecakx-eh.htmlthis
Generator
生成器