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

參考

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.