1.SPL 是什麼?
SPL:standard php library php標準庫,此 從php5.0起開始內置的組件和接口,在5.3之後逐漸成熟。由於內置在php5開發環境中,無需任何配置。
根據官方定義,「a collection of interfaces and classes that are meant to solve standard problems.」
然而在目前的使用者,spl更多地被看作是一種使object模仿的array行爲的interfaces和classes。
SPL對PHP引擎進行了擴展,例如ArrayAccess、Countable和SeekableIterator等接口,它們用於以數組形式操做對象。同時還可使用RecursiveIterator,ArrayObjects等其餘迭代器進行數組的迭代操做。
他還內置了幾個對象,例如Exceptions,SplObserver,spltorage以及splautoloadregister,splclasses,iteratorapply等的幫助函數,用於重載對應的功能。
2.Iterator
spl的核心概念是Iterator,這指一種設計模式(Design Pattern),"provide an object which traverses some aggregate structure,abstracting away assumptions about the implementation of that structure."
通俗的說,Iterator可以使許多不一樣的數據結構,都能有統一的操做界面,好比一個數據庫的結果集、同一目錄的文件集或者一個文本中每一行構成的集合。
SPL規定,全部部署了Iterator界面的class,均可以用在foreach loop中。Iterator界面包含如下必須部署的五個方法:php
current()數據庫
This method returns the current index's value. You are solely
responsible for tracking what the current index is as the
interface does not do this for you.設計模式
key()數組
This method returns the value of the current index's key. For
foreach loops this is extremely important so that the key
value can be populated.數據結構
next()app
This method moves the internal index forward one entry.less
rewind()ide
This method should reset the internal index to the first element.函數
valid()oop
This method should return true or false if there is a current
element. It is called after rewind() or next().
ArrayAccess界面
部署ArrayAccess界面,可使object像Array那樣操做,可是必須包含四個必須部署的方法
ArrayObject類
此類將Array轉換爲Object
ArrayIterator類
這個類其實是對ArrayObject類的補充,爲後者提供遍歷功能。也支持offset類方法和count()方法
RecursiveArrayIterator類和RecursiveIteratorIterator類
ArrayIterator類和ArrayObject類,只支持遍歷一維數組,若是要遍歷多維數組,必須先用RecursiveIteratorIterator生成一個Iterator,而後再對這個Iterator使用RecursiveIteratorIterator
FilterIterator
FilterIterator類能夠對元素進行過濾,只要在accept()方法中設置過濾條件就能夠了。
SimpleXMLIterator類這個類用來遍歷xml文件CachingIterator類這個類有一個hasNext()方法,用來判斷是否還有下一個元素LimitIterator類這個類用來限定返回結果集的數量和位置,必須提供offset和limit兩個參數,與SQL命令中的limit語句相似SplFileObject類這個類用來對文本文件進行遍歷