首頁 後端開發 php教程 PHP的標準函式庫

PHP的標準函式庫

Apr 28, 2018 am 11:49 AM
php 標準

這篇文章主要介紹了關於PHP的標準庫,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

#轉:https://www.cnblogs.com /yafang/p/5872187.html 

一.什麼是SPL?

    SPL是用來解決典型問題(standard problems)的一組介面與類別的集合。 (出自:http://php.net/manual/zh/intro.spl.php)

    SPL,PHP 標準庫(Standard PHP Library) ,從PHP 5.0 起內建的元件和接口,且從PHP5.3 已逐漸的成熟。 SPL 在所有的 PHP5 開發環境中被內置,同時無需任何設定。

  二.如何使用?

    SPL提供了一組標準資料結構:

    雙向鍊錶



PHP的標準函式庫

PHP的標準函式庫


PHP的標準函式庫

############# ###SplStack############SplQueue#############SplDoublyLinkedList################    雙鍊錶是一種重要的線性儲存結構,對於雙鍊錶中的每個節點,不僅儲存自己的訊息,還要保存前驅和後繼節點的位址。 ######    PHP SPL中的SplDoublyLinkedList類別提供了雙鍊錶的運算。 ######    SplDoublyLinkedList類別摘要如下:##########################
 1 SplDoublyLinkedList implements Iterator  , ArrayAccess  , Countable  { 
 2    
 3   public __construct ( void ) 
 4   public void add ( mixed $index , mixed $newval ) 
 5   //双链表的头部节点 
 6   public mixed top ( void ) 
 7   //双链表的尾部节点 
 8   public mixed bottom ( void ) 
 9   //双联表元素的个数
 10   public int count ( void )
 11   //检测双链表是否为空
 12   public bool isEmpty ( void )
 13   
 14   
 15   //当前节点索引
 16   public mixed key ( void )
 17   //移到上条记录
 18   public void prev ( void )
 19   //移到下条记录
 20   public void next ( void )
 21   //当前记录
 22   public mixed current ( void )
 23   //将指针指向迭代开始处
 24   public void rewind ( void )
 25   //检查双链表是否还有节点
 26   public bool valid ( void )
 27   
 28   //指定index处节点是否存在
 29   public bool offsetExists ( mixed $index )
 30   //获取指定index处节点值
 31   public mixed offsetGet ( mixed $index )
 32   //设置指定index处值
 33   public void offsetSet ( mixed $index , mixed $newval )
 34   //删除指定index处节点
 35   public void offsetUnset ( mixed $index )
 36   
 37   //从双链表的尾部弹出元素
 38   public mixed pop ( void )
 39   //添加元素到双链表的尾部
 40   public void push ( mixed $value )
 41   
 42   //序列化存储
 43   public string serialize ( void )
 44   //反序列化
 45   public void unserialize ( string $serialized )
 46   
 47   //设置迭代模式
 48   public void setIteratorMode ( int $mode )
 49   //获取迭代模式SplDoublyLinkedList::IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style)
 50   public int getIteratorMode ( void )
 51   
 52   //双链表的头部移除元素
 53   public mixed shift ( void )
 54   //双链表的头部添加元素
 55   public void unshift ( mixed $value )
 56   
 57 }
登入後複製
####################### #######     ######    使用起來也比較簡單###########################
1 $list = new SplDoublyLinkedList(); 
2 $list->push('a'); 
3 $list->push('b'); 
4 $list->push('c');
5 $list->push('d'); 
6  
7 $list->unshift('top'); 
8 $list->shift(); 
9 
10 $list->rewind();//rewind操作用于把节点指针指向Bottom所在的节点
11 echo 'curren node:'.$list->current()."<br>";//获取当前节点
12 
13 $list->next();//指针指向下一个节点
14 echo 'next node:'.$list->current()."<br>";
15 
16 $list->next();
17 $list->next();
18 $list->prev();//指针指向上一个节点
19 echo 'next node:'.$list->current()."<br>";
20 
21 if($list->current())
22     echo 'current node is valid<br>';
23 else
24     echo 'current node is invalid<br>';
25 
26 
27 if($list->valid())//如果当前节点是有效节点,valid返回true
28     echo "valid list<br>";
29 else
30     echo "invalid list <br>";
31 
32 
33 var_dump(array(
34     'pop' => $list->pop(),
35     'count' => $list->count(),
36     'isEmpty' => $list->isEmpty(),
37     'bottom' => $list->bottom(),
38     'top' => $list->top()
39 )); 
40 
41 $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
42 var_dump($list->getIteratorMode());
43 
44 for($list->rewind(); $list->valid(); $list->next()) {
45     echo $list->current().PHP_EOL;
46 }
47 
48 var_dump($a = $list->serialize());
49 //print_r($list->unserialize($a));
50 
51 $list->offsetSet(0,'new one');
52 $list->offsetUnset(0);
53 var_dump(array(
54     'offsetExists' => $list->offsetExists(4),
55     'offsetGet' => $list->offsetGet(0),
56 
57 ));
58 var_dump($list);
59 
60 //堆栈,先进后出
61 $stack = new SplStack();//继承自SplDoublyLinkedList类
62 
63 $stack->push("a<br>");
64 $stack->push("b<br>");
65 
66 echo $stack->pop();
67 echo $stack->pop();
68 echo $stack->offsetSet(0,'B');//堆栈的offset=0是Top所在的位置,offset=1是Top位置节点靠近bottom位置的相邻节点,以此类推
69 $stack->rewind();//双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向bottom所在位置70 echo 'current:'.$stack->current().'<br>';
71 
72 $stack->next();//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点
73 echo 'current:'.$stack->current().'<br>';
74 echo '<br><br>';
75 
76 //队列,先进先出
77 $queue = new SplQueue();//继承自SplDoublyLinkedList类
78 
79 $queue->enqueue("a<br>");//插入一个节点到队列里面的Top位置
80 $queue->enqueue("b<br>");
81 
82 $queue->offsetSet(0,'A');//堆栈的offset=0是Top所在的位置,offset=1是Top位置节点靠近bottom位置的相邻节点,以此类推
83 
84 echo $queue->dequeue();
85 echo $queue->dequeue();
86 
87 echo "<br><br>";
登入後複製

PHP的標準函式庫

    堆


    • SplMaxHeap

    • SplMinHeap

    • SplHeap

    堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现。根节点最大的堆叫做最大堆或大根堆(SplMaxHeap),根节点最小的堆叫做最小堆或小根堆(SplMinHeap)。二叉堆还常用于排序(堆排序)。

    SplHeap类摘要如下:

PHP的標準函式庫

1 abstract SplHeap implements Iterator , Countable {
2   /* 方法 */ 
3   public __construct ( void ) 
4   abstract protected int compare ( mixed $value1 , mixed $value2 ) 
5   public int count ( void ) 
6   public mixed current ( void ) 
7   public mixed extract ( void ) 
8   public void insert ( mixed $value ) 
9   public bool isEmpty ( void )
10   public mixed key ( void )
11   public void next ( void )
12   public void recoverFromCorruption ( void )
13   public void rewind ( void )
14   public mixed top ( void )
15   public bool valid ( void )
16 }
登入後複製

PHP的標準函式庫

    显然它是一个抽象类,最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是继承它实现的。最大堆和最小堆并没有额外的方法。

SplHeap简单使用:

PHP的標準函式庫

1 //堆 
2 class MySplHeap extends SplHeap{ 
3     //compare()方法用来比较两个元素的大小,绝对他们在堆中的位置 
4     public function compare( $value1, $value2 ) { 
5         return ( $value1 - $value2 ); 
6     } 
7 } 
8  
9 $obj = new MySplHeap();
10 
11 $obj->insert(0);
12 $obj->insert(1);
13 $obj->insert(2);
14 $obj->insert(3);
15 $obj->insert(4);
16 
17 echo $obj->top();//4
18 echo $obj->count();//5
19 
20 foreach ($obj as $item) {
21     echo $item."<br>";
22 }
登入後複製

PHP的標準函式庫 

    队列


    • SplPriorityQueue

优先队列也是非常实用的一种数据结构,可以通过加权对值进行排序,由于排序在php内部实现,业务代码中将精简不少而且更高效。通过SplPriorityQueue::setExtractFlags(int  $flag)设置提取方式可以提取数据(等同最大堆)、优先级、和两者都提取的方式。

    SplPriorityQueue类摘要如下:

PHP的標準函式庫

1 SplPriorityQueue implements Iterator , Countable { 
2   /* 方法 */ 
3   public __construct ( void ) 
4   public int compare ( mixed $priority1 , mixed $priority2 ) 
5   public int count ( void ) 
6   public mixed current ( void ) 
7   public mixed extract ( void ) 
8   public void insert ( mixed $value , mixed $priority ) 
9   public bool isEmpty ( void )
10   public mixed key ( void )
11   public void next ( void )
12   public void recoverFromCorruption ( void )
13   public void rewind ( void )
14   public void setExtractFlags ( int $flags )
15   public mixed top ( void )
16   public bool valid ( void )
17 }
登入後複製

PHP的標準函式庫

    简单使用:

PHP的標準函式庫

1 $pq = new SplPriorityQueue(); 
2  
3 $pq->insert('a', 10); 
4 $pq->insert('b', 1); 
5 $pq->insert('c', 8); 
6  
7 echo $pq->count() .PHP_EOL; //3 
8 echo $pq->current() . PHP_EOL; //a 
9 
10 /**
11  * 设置元素出队模式
12  * SplPriorityQueue::EXTR_DATA 仅提取值
13  * SplPriorityQueue::EXTR_PRIORITY 仅提取优先级
14  * SplPriorityQueue::EXTR_BOTH 提取数组包含值和优先级
15  */
16 $pq->setExtractFlags(SplPriorityQueue::EXTR_DATA);
17 
18 while($pq->valid()) {
19     print_r($pq->current());  //a  c  b
20     $pq->next();
21 }
登入後複製

PHP的標準函式庫

    阵列


    • SplFixedArray

SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。通常情况下SplFixedArray要比php array快上20%~30%,所以如果你是处理巨大数量的固定长度数组,还是强烈建议使用。

SplFixedArray类摘要如下:

PHP的標準函式庫

1 SplFixedArray implements Iterator , ArrayAccess , Countable {
2   /* 方法 */ 
3   public __construct ([ int $size = 0 ] ) 
4   public int count ( void ) 
5   public mixed current ( void ) 
6   public static SplFixedArray fromArray ( array $array [, bool $save_indexes = true ] ) 
7   public int getSize ( void ) 
8   public int key ( void ) 
9   public void next ( void )
10   public bool offsetExists ( int $index )
11   public mixed offsetGet ( int $index )
12   public void offsetSet ( int $index , mixed $newval )
13   public void offsetUnset ( int $index )
14   public void rewind ( void )
15   public int setSize ( int $size )
16   public array toArray ( void )
17   public bool valid ( void )
18   public void __wakeup ( void )
19 }
登入後複製

PHP的標準函式庫

简单使用:

PHP的標準函式庫

1 $arr = new SplFixedArray(4);
2 $arr[0] = 'php'; 
3 $arr[1] = 1; 
4 $arr[3] = 'python'; 
5  
6 //遍历, $arr[2] 为null 
7 foreach($arr as $v) { 
8     echo $v . PHP_EOL; 
9 }
10 
11 //获取数组长度
12 echo $arr->getSize(); //4
13 
14 //增加数组长度
15 $arr->setSize(5);
16 $arr[4] = 'new one';
17 
18 //捕获异常
19 try{
20     echo $arr[10];
21 } catch (RuntimeException $e) {
22     echo $e->getMessage();
23 }
登入後複製

PHP的標準函式庫

    映射


    • SplObjectStorage

用来存储一组对象的,特别是当你需要唯一标识对象的时候。

PHP SPL SplObjectStorage类实现了Countable,Iterator,Serializable,ArrayAccess四个接口。可实现统计、迭代、序列化、数组式访问等功能。

SplObjectStorage类摘要如下:

PHP的標準函式庫

1 SplObjectStorage implements Countable , Iterator , Serializable , ArrayAccess { 
2   /* 方法 */ 
3   public void addAll ( SplObjectStorage $storage ) 
4   public void attach ( object $object [, mixed $data = NULL ] ) 
5   public bool contains ( object $object ) 
6   public int count ( void ) 
7   public object current ( void ) 
8   public void detach ( object $object ) 
9   public string getHash ( object $object )
10   public mixed getInfo ( void )
11   public int key ( void )
12   public void next ( void )
13   public bool offsetExists ( object $object )
14   public mixed offsetGet ( object $object )
15   public void offsetSet ( object $object [, mixed $data = NULL ] )
16   public void offsetUnset ( object $object )
17   public void removeAll ( SplObjectStorage $storage )
18   public void removeAllExcept ( SplObjectStorage $storage )
19   public void rewind ( void )
20   public string serialize ( void )
21   public void setInfo ( mixed $data )
22   public void unserialize ( string $serialized )
23   public bool valid ( void )
24 }
登入後複製

PHP的標準函式庫

    简单使用:

PHP的標準函式庫

1 class A { 
2     public $i; 
3     public function __construct($i) { 
4         $this->i = $i; 
5     } 
6 } 
7   
8 $a1 = new A(1); 
9 $a2 = new A(2);
10 $a3 = new A(3);
11 $a4 = new A(4);
12  
13 $container = new SplObjectStorage();
14  
15 //SplObjectStorage::attach 添加对象到Storage中
16 $container->attach($a1);
17 $container->attach($a2);
18 $container->attach($a3);
19  
20 //SplObjectStorage::detach 将对象从Storage中移除
21 $container->detach($a2);
22  
23 //SplObjectStorage::contains用于检查对象是否存在Storage中
24 var_dump($container->contains($a1)); //true
25 var_dump($container->contains($a4)); //false
26  
27 //遍历
28 $container->rewind();
29 while($container->valid()) {
30     var_dump($container->current());
31     $container->next();
32 }
登入後複製

以上是PHP的標準函式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

See all articles