在看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
生成器