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

相關文章
相關標籤/搜索