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

參考

外部連結