PHP 的 预约义接口

在看Yii框架源码的时候,看到了很是多的Classimplements \ArrayAccess,因而追根溯源让我看到了我不曾到过的地方,那就是:
Predefined Interfaces and Classes 预约义接口
PHP 的预约义接口有这些:php

  1. Traversable 遍历
  2. Iterator 迭代器
  3. IteratorAggregate 聚合式迭代器
  4. ArrayAccess 数组式访问
  5. Serializable 序列化
  6. Closure
  7. Generator 生成器

接下来咱们一个一个讲:html

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对象和类做用域。

这块能够参考 http://www.javashuo.com/article/p-upgecakx-eh.htmlthis

7. Generator 生成器

相关文章
相关标签/搜索