PHP標準函數庫(Standard PHP Library,縮寫:SPL),是PHP5.0之後新添加的重要函數庫。它提供了一系列的介面(interface)和類別(classes)解決網站開發中普遍碰到的問題。原始碼在ext/spl目錄下。
此條目應避免有陳列雜項、瑣碎資料的部分。 (2012年8月19日) |
介紹
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:執行期間的演算法/快取的向下溢位異常。
- LogicException:邏輯錯誤異常類別。
一此其它函數
- 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.