PHP  SPL是指 standard  php library,php标准库。

SPL提供了一系列的类和接口,使用这些类和接口,我们可以更加高效、优雅的使用php进行程序设计。
 
从php5.0开始,已经支持spl。从5.3开始,SPL已经嵌入PHP内核,无需任何配置
 
php提供了下列的数据结构类:
 
SplDoublyLinkedList  :双向链表 , 实现了 Iterator|ArrayAccess|Countable接口中的方法
SplStack: 栈
SplQueue: 队列
SplHeap :堆
SplMaxHeap:大顶堆
SplMinHeap:小顶堆
SplPriorityQueue:带权队列
SplFixedArray:固定数组
 
 
先学习SplFixedArray,为之后其他的学习打下基础
  1. <?php
  2. /*
  3. * SplFixedArray():用于创建固定长度的数组,只允许整型数作为索引,比普通php数组更快,性能更好
  4. * 它本身实现了Iterator ArrayAccess Countable这几个接口
  5. * 实现了ArrayAccess,那么可以使用foreach遍历
  6. * 实现了Countable,那么可以使用count计算长度
  7. * 实现了Iterator,那么可以向链表一样操作
  8. */
  9. $arr = new SplFixedArray(5);//创建时指定长度
  10.  
  11. $arr->setSize(4);//setSize()动态设置数组长度
  12. $arr[0] = 'a';
  13. $arr[1] = 'b';
  14. $arr[2] = 'c';
  15. $arr[3] = 'd';
  16.  
  17. //遍历,遍历完后指针指向末尾空
  18. foreach ($arr as $v){
  19. echo $v;
  20. echo PHP_EOL;
  21. }
  22. echo "<br/>";
  23. var_dump($arr->valid());//已经移出数组外
  24.  
  25. //getSize() count()都是获取数组长度
  26. $a = $arr->getSize();
  27. echo $a;//4
  28. echo "<br/>";
  29.  
  30. echo $arr->count();//实现了Countable接口的方法,4
  31. echo "<br/>";
  32.  
  33. $a = count($arr);//数组实现了Countable,php数组提供的count方法也可用
  34. echo $a;//4
  35. echo "<br/>";
  36.  
  37. //实现Iterator中的方法
  38.  
  39. /*
  40. * 移动指针方法: rewind(),next(),都只移动指针,无返回值,是一个动作
  41. * 取键值的方法: key(),current() 返回当前指针指向的index 和element
  42. * 检查指针方法: valid() 检查当前指针是否超出数组范围,返回bool值
  43. *
  44. */
  45.  
  46. $arr->rewind();//重置指针,指向开头处,无返回值
  47. $a = $arr->current();//返回当前指针指向的值
  48. var_dump($a);
  49. echo PHP_EOL;
  50. $arr->next();//移动指针,将指针指向下一位,无返回值
  51. $a = $arr->valid();//检测当前指针是否有效,也就是说当前指针是否超出数组范围
  52. var_dump($a);
  53. $a = $arr->current();//返回当前指针指向的值
  54. var_dump($a);
  55. echo PHP_EOL;
  56. echo $arr->key();//返回当前指针指向的key
  57. $arr->next();
  58. $arr->next();
  59. $arr->next();//移出了数组范围,
  60. var_dump($arr->valid());//检测返回false
  61.  
  62. /*======================================
  63. *
  64. * offsetget(index) = $arr[$index]//获取索引对应的元素值
  65. * offserget(index,element) = ($arr[$index]=$element)//修改index对应的element
  66. * offsetUnset(index) = unset($arr[$index])//释放index对应的element
  67. * offsetExists(index) = isset($arr[$index])//判断index是否存在
  68. *
  69. *=======================================*/
  70. $a = $arr->offsetGet(3); // 相当于 $arr[3]
  71. var_dump($a);//d
  72. echo $arr[3];//d
  73. echo PHP_EOL;
  74.  
  75. $arr->offsetSet(3,'e');//相当于$arr[3] = 'e';
  76. echo $arr[3];
  77. $arr[3] = 'd';
  78. echo PHP_EOL;
  79. echo $arr[3];
  80.  
  81. $arr->offsetUnset(3);//相当于unset($arr[3]);
  82. var_dump($arr[3]);//null
  83.  
  84. $m = $arr->offsetExists(3);//相当于isset($arr[3])
  85. var_dump($m);
  86.  
  87. /*=======SplFixedArray()与PHP数组的转化函数======
  88.  
  89. 方法 fromAaary() : 将一个PHP普通数组转化成SPL数组,静态方法SplFixedArray::fromArray(),
  90. 方法 toArray() :将一个SPL数组转化成PHP普通数组 ,无参数,返回PHP普通数组
  91.  
  92. =============================================*/
  93.  
  94. $arr = $arr->toArray();
  95. var_dump($arr);//返回普通php数组
  96.  
  97. $arr = array(1=>3,0=>1,4=>2);//普通PHP数组
  98. $arr = SplFixedArray::fromArray($arr);//第二个参数是默认true,表示保持原来的索引关系。false表示舍弃原来的索引
  99. var_dump($arr);//返回SPL数组
  100.  
  101. $arr = array(1=>3,0=>1,4=>2);//普通PHP数组
  102. $arr = SplFixedArray::fromArray($arr,false);//舍弃原来的索引关系
  103. var_dump($arr);//返回SPL数组
  104.  
  105. ?>

  接下来是双向链表

  1. <?php
  2. /**
  3. * SPL双向队列SplDoublyLinkedList(),实现了Iterator , ArrayAccess , Countable接口
  4. */
  5.  
  6. $linklist = new SplDoublyLinkedList();
  7.  
  8. $linklist->push('a');//插入元素
  9. $linklist->push('b');
  10. $linklist->push('c');
  11. $linklist->push('d');
  12.  
  13. var_dump($linklist->getIteratorMode());
  14.  
  15. /*
  16. * Iterator 系列方法
  17. */
  18. $linklist->rewind();//指针指向开头,动作,无返回值
  19. $linklist->next();//移动指针,动作,无返回值
  20. var_dump($linklist->key());//返回当前指针指向的index
  21. var_dump($linklist->current());//返回当前指针指向的element
  22. var_dump($linklist->valid());//检测指针是否移出链表
  23.  
  24. //补充
  25. $linklist->prev();//指针向前移动,对应next向后
  26. var_dump($linklist->current());
  27.  
  28. /*
  29. * ArrayAccess 系列方法
  30. */
  31. //offSetGet offsetSet offsetExists offsetUnset 和SplFixedArray的一样,按照数组方式的几个操作
  32. foreach ($linklist as $value){//可以像foreach遍历
  33. echo $value;
  34. echo PHP_EOL;
  35. }
  36.  
  37. var_dump($linklist[0]);//以数组方式取值
  38. echo count($linklist);//4,数组方式
  39. echo PHP_EOL;
  40.  
  41. /*
  42. * Countable()方法
  43. */
  44. echo $linklist->count();//4
  45.  
  46. /*
  47. * 自身特有方法
  48. */
  49.  
  50. $linklist->rewind();//指针指向底部,这个函数要常用
  51.  
  52. //add()方法在5.5.0以上的版本才存在,将一个值插入链表某个位置,和原来的值形成链表,也就是这个节点的多个值链接成一个链表
  53. //serialize()/unserialize()两个函数在5.4.0以上的版本中才能使用,序列化和反序列化使用
  54.  
  55. var_dump($linklist->isEmpty());//判断是否为空
  56. $linklist->push('e');//往顶部插入元素
  57. $linklist->unshift('A');//往底部插入元素
  58.  
  59. var_dump($linklist->top());//返回顶部元素,后插入的在顶部
  60. var_dump($linklist->bottom());//返回底部元素,先插入的在底部
  61.  
  62. var_dump($linklist->pop());//弹出顶部元素
  63. var_dump($linklist->shift());//弹出底部元素
  64.  
  65. $linklist->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);//这两个是一对,暂不清楚具体怎么用的
  66. var_dump($linklist->getIteratorMode());
  67.  
  68. ?>

  

SPL 笔记的更多相关文章

  1. PHP标准库 (SPL) 笔记

    简介 SPL是Standard PHP Library(PHP标准库)的缩写. The Standard PHP Library (SPL) is a collection of interfaces ...

  2. 【夯实PHP基础】PHP标准库 SPL

    PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...

  3. PHP 错误与异常 笔记与总结(12 )异常

    ① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...

  4. PHP高级编程SPL

    这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去非常复杂,可是非常实用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 因为这是供自己參考的笔记,不 ...

  5. PHP标准库 SPL

    PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...

  6. php spl库的使用(PHP标准库)【摘抄引用】

    文章来源与推荐阅读:阮一峰--PHP SPL笔记  &&  PHP SPL使用方法和他的威力 1.SPL 是什么? SPL:standard php library php标准库,此 ...

  7. PHP 设计模式 笔记与总结(3)SPL 标准库

    SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...

  8. php学习笔记2016.1

    基本类型    PHP是一种弱类型语言.      PHP类型检查函数   is_bool()    is_integer()  is_double()  is_string()   is_objec ...

  9. SPL学习 迭代器

    主要学习内容: 慕课网的spl视频教程 阮一峰SPL学习笔记 http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html SPL类详解 http ...

随机推荐

  1. Socket编程 - 网络基础知识

    API编程部分:http://www.cnblogs.com/Jimmy1988/p/7895213.html 1. 协议简介 此处,我们主要介绍Linux编程常用的三种协议(TCP/UDP/IP), ...

  2. mysql5.0版本下载地址

    http://dev.mysql.com/downloads/mysql/5.0.html Other Downloads: Windows (x86, 32-bit), ZIP Archive 5. ...

  3. BASE64转文件下载

    你可以用HTML 5 注意:返回的文件数据必须是base 64编码的,因为您不能对二进制数据进行JSON编码 在我的AJAX我得到了如下的数据结构: <!DOCTYPE html> < ...

  4. Python__组合数据类型

    组合数据:集合类型.序列类型(元组类型.列表类型).字典类型 集合: 定义:集合是多个元素的无序组合.(无序,唯一,Python中要求放入集合中的数据类型是不可变的). 集合用大括号 {}表示,元素间 ...

  5. 入门redis

    学习了大佬的博客,来源自:https://www.cnblogs.com/5ishare/p/6280023.html 一.下载 https://github.com/ServiceStack/red ...

  6. jquery源码学习笔记(一)jQuery的无new构建

    本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不 ...

  7. AngleSharp一些示例

    看到了AngleSharp,感觉这个非常好用,比HtmlAgilityPack感觉好用点 AngleSharp 地址:https://github.com/AngleSharp/AngleSharp ...

  8. js设置光标插入文字和HTML

    原文链接:js设置光标插入文字和HTML 在一个textarea的某个光标位置插入文字或者在某个编辑器中插入图片html内容,我最近经常和这些打交道,但总是一团模糊,今天整理一下关于如何插入文字,设置 ...

  9. 正能量:You Are the Best

    Success comes from knowing that you did your best to become the best that you are capable of becomin ...

  10. Myeclipse使用过程配置汇总

    1.下载安装及破解方法 myeclipse2014专业版下载地址链接:https://pan.baidu.com/s/1i62YOGt 密码:nlqj    : 下载后安装到最后一步先不要打开软件,如 ...