PHP標準庫
此條目應避免有陳列雜項、瑣碎資料的部分。 (2012年8月19日) |
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:運行期間的算法/緩存的向下溢出異常。
- 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