1

在看Yii框架源码的时候,看到了非常多的Classimplements \ArrayAccess,于是追根溯源让我看到了我未曾到过的地方,那就是:
Predefined Interfaces and Classes 预定义接口
PHP 的预定义接口有这些:

  1. Traversable 遍历
  2. Iterator 迭代器
  3. IteratorAggregate 聚合式迭代器
  4. ArrayAccess 数组式访问
  5. Serializable 序列化
  6. Closure
  7. 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

7. Generator 生成器


CRStudio
115 声望4 粉丝