在看Yii框架源码的时候,看到了非常多的Class
去implements
\ArrayAccess
,于是追根溯源让我看到了我未曾到过的地方,那就是:Predefined Interfaces and Classes
预定义接口
PHP 的预定义接口有这些:
-
Traversable
遍历 -
Iterator
迭代器 -
IteratorAggregate
聚合式迭代器 -
ArrayAccess
数组式访问 -
Serializable
序列化 Closure
-
Generator
生成器
接下来我们一个一个讲:
1. Traversable
遍历
他的作用就是判断某个类是否能被遍历,但是数组和对象是可以遍历的,但他们不属于Traversable
,判断的方法就是 instanceof Traversable
2. Iterator
迭代器
-
Iterator::rewind
返回到迭代器的第一个元素 -
Iterator::valid
检查当前位置是否有效 -
Iterator::current
返回当前元素 -
Iterator::key
返回当前元素的键 -
Iterator::next
向前移动到下一个元素
内部的方法和执行顺序就是以上顺序,网上可以找到很多例子,这个东西的作用是什么呢?就是可以自定义遍历的具体流程和输出。
3. IteratorAggregate
聚合式迭代器
IteratorAggregate extends Traversable {
/* 方法 */
abstract public getIterator (void) :Traversable
}
只有一个方法 getIterator
4. ArrayAccess
数组式访问
看到这个,我才知道不是所有的对象都可以用 $a['property']
这样的方式访问的,如果想以这种方式访问,就必须implements
ArrayAccess
。他有四个方法:
-
ArrayAccess::offsetExists
— 检查一个偏移位置是否存在 -
ArrayAccess::offsetGet
— 获取一个偏移位置的值 -
ArrayAccess::offsetSet
— 设置一个偏移位置的值 -
ArrayAccess::offsetUnset
— 复位一个偏移位置的值
5. Serializable
序列化
-
Serializable::serialize
— 对象的字符串表示 -
Serializable::unserialize
— 构造对象
6. Closure
匿名函数
-
Closure::__construct
— 用于禁止实例化的构造函数 -
Closure::bind
— 复制一个闭包,绑定指定的$this对象和类作用域。 -
Closure::bindTo
— 复制当前闭包对象,绑定指定的$this对象和类作用域。
这块可以参考 https://www.cnblogs.com/eleven24/p/7487923.html
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。