PHP標準庫

PHP標準庫Standard PHP Library,縮寫:SPL),是PHP5.0之後新添加的重要庫。它提供了一系列的接口(interface)和(classes)解決網站開發中普遍碰到的問題。源碼在ext/spl目錄下。

介紹

SPL主要提供了以下幾個方面的內容:

  • iterator:迭代器,這是SPL中最重要的內容。它提供了一系列的接口和內置迭代器類。
  • exception:異常類,它聲明一了組和C++標準的異常類。
  • Observer:觀察者模式,觀察者模式在MVC中經常用到。
  • 以及一些單體函數。

SPL主要的類

主要接口

  • ArrayAccess:其功能是使類可以像PHP中的數組一樣操作。有點類似於.NET平台的index操作。
  • Traversable:是Zend引擎的內置接口,它是能讓類用於foreach語句的接口,但是在PHP中並不能直接實現Traversable。只能間接地通過Iterator或IteratorAggregate接口實現。
  • IteratorAggregate(繼承Traversable,是他的兒子)是除Iterator之外另一個從Traversable接口中繼承而來的。其接口也很簡單,只有一個函數。就是返回一個迭代器實例。
  • Iterator(也是繼承Traversable,是他的兒子),SPL中大部分接口和類都是從這個接口繼承而來的。
  • RecursiveIterator(繼承Iterator,為Traversable的孫子),遞歸迭代器,通過hasChildre()和getChildren()兩個函數實現遞歸遍歷子元素。
  • Countable:這接口就一個count()函數,返回結果集的數量。實現這個接口的類可以用count()函數查詢其結果集。
  • Serializable:該接口實現序列化和反序列化的接口。在沒有SPL之前,可以通過__sleep()和__wakeup()實現相同的功能,若同時實現了Serializable接口和_sleep()和__wakeup(),則只有Serializable接口的函數啟作用。
  • OuterIterator:它的實現者可以包含一個或多個迭代器成員,即可以通過getInnerIterator()接口函數獲取內部的迭代器,也可以直接通過類本身實現的Iterator接口遍歷內部的迭代器數據。這在SPL是一個非常重要的接口,SPL中很多內置的迭代器實現了這個接口。
  • SplObserver:觀察者模式的中的觀察者接口。
  • SplSubject:觀察者模式的中的發布者接口。

主要類

  • DirectoryIterator:這個類用來查看一個目錄中的所有文件和子目錄。
  • FilterIterator:這是一個抽象類,它實現了OuterIterator接口。它包裝一個已有的迭代器類,通過抽象方法accept()過濾掉不需要的內容,形成一個新的迭代器。
  • LimitIterator:這也是一個實現OuterIterator的類。它有點類似於SQL中的LIMIT語句。它通過包裝一個已有迭代器,然後截取其中某一段數據形成一個新的迭代器。
  • RecursiveDirectoryIterator:遞歸查看一個目錄中的所有文件的子目錄。
  • SimpleXMLIterator:一個遍歷XML內容的類
  • IteratorIterator:實現對迭代器的包裝,這也是SPL中對OuterIterator默認實現。
  • InfiniteIterator:從字面意思就知道,這是個無限循環的迭代器,當next()到達最後時,會自動調用rewind()函數,又從頭開始。
  • AppendIterator:它實現了對一系統迭代器的包裝,並且可以在運行過程中添加新的迭代器。
  • SplFileInfo:獲取文件信息類。SplFileObject從該類繼承。
  • SplFileObject:文件操作類,可以按行的方式遍歷文件內容。同時還能獲取文件的大小及其它詳細信息。

異常類

  • Exception:異常基類
    • LogicException:邏輯錯誤異常類。
      • BadFunctionCallException:不合法的函數被調用產生的異常類。
      • BadMethodCallException:不合法的方法被調用產生的異常類。
      • DomainException:表示一個值不在有效範圍內的異常。
      • InvalidArgumentException:表示傳遞了無效的參數產生的異常。
      • LengthException:表示一個參數超過了許可的長度的異常。
      • OutOfRangeException:表示請求檢索超越了數組等容器最大長度的異常。
    • RuntimeException:運行時錯誤異常類。
      • OutOfBoundsException:表示請求檢索超越了數組等容器最大長度的異常。
      • OverflowException:表示算法/緩存溢出異常。
      • RangeException:運行期間的範圍異常。
      • UnderflowException:運行期間的算法/緩存的向下溢出異常。

一此其它函數

  • iterator_apply:為迭代器中每個元素調用一個用戶自定義函數
  • iterator_count:計算迭代器中元素的個數
  • iterator_to_array:將迭代器中的元素拷貝到數組
  • spl_autoload_call:嘗試調用所有已註冊的__autoload()函數來裝載請求類
  • spl_autoload_extensions:註冊並返回spl_autoload函數使用的默認文件擴展名。
  • spl_autoload_functions:返回所有已註冊的__autoload()函數。
  • spl_autoload_register:註冊__autoload()函數
  • spl_autoload_unregister:註銷已註冊的__autoload()函數
  • spl_autoload __autoload():函數的默認實現
  • spl_classes:返回所有可用的SPL類

6.0中新增的數據結構

  • SplDoublyLinkedList
  • SplStack
  • SplQueue
  • SplHeap
  • SplMaxHeap
  • SplMinHeap
  • SplPriorityQueue
  • SplFixedArray這是個固定大小的數組,性能比系統內置的array()要快些。
  • SplObjectStorage

參考

外部連結