文章来源与推荐阅读阮一峰--PHP SPL笔记  &&  PHP SPL使用方法和他的威力

1.SPL 是什么?

  • SPL:standard php library php标准库,此 从php5.0起开始内置的组件和接口,在5.3以后逐渐成熟。因为内置在php5开发环境中,无需任何配置。

   根据官方定义,“a collection of interfaces and classes that are meant to solve standard problems.” 然而在目前的使用者,spl更多地被看做是一种使object模仿的array行为的interfaces和classes。

  • SPL对PHP引擎进行了扩展,例如ArrayAccess、Countable和SeekableIterator等接口,它们用于以数组形式操作对象。同时还可以使用RecursiveIterator,ArrayObjects等其他迭代器进行数组的迭代操作。

     他还内置了几个对象,例如Exceptions,SplObserver,spltorage以及splautoloadregister,splclasses,iteratorapply等的帮助函数,用于重载对应的功能。

2.Iterator

  • spl的核心概念是Iterator,这指一种设计模式(Design Pattern),"provide an object which traverses some aggregate structure,abstracting away assumptions about the implementation of that structure." 通俗的说,Iterator能够使许多不同的数据结构,都能有统一的操作界面,比如一个数据库的结果集、同一目录的文件集或者一个文本中每一行构成的集合。
  • SPL规定,所有部署了Iterator界面的class,都可以用在foreach loop中。Iterator界面包含以下必须部署的五个方法:
  1. * current()
  2.  
  3. This method returns the current index's value. You are solely
  4. responsible for tracking what the current index is as the
  5. interface does not do this for you.
  6.  
  7. * key()
  8.  
  9. This method returns the value of the current index's key. For
  10. foreach loops this is extremely important so that the key
  11. value can be populated.
  12.  
  13. * next()
  14.  
  15. This method moves the internal index forward one entry.
  16.  
  17. * rewind()
  18.  
  19. This method should reset the internal index to the first element.
  20.  
  21. * valid()
  22.  
  23. This method should return true or false if there is a current
  24. element. It is called after rewind() or next().
  • ArrayAccess界面
  部署ArrayAccess界面,可以使object像Array那样操作,但是必须包含四个必须部署的方法
 
  1. * offsetExists($offset)
  2.  
  3. This method is used to tell php if there is a value
  4. for the key specified by offset. It should return
  5. true or false.
  6.  
  7. * offsetGet($offset)
  8.  
  9. This method is used to return the value specified
  10. by the key offset.
  11.  
  12. * offsetSet($offset, $value)
  13.  
  14. This method is used to set a value within the object,
  15. you can throw an exception from this function for a
  16. read-only collection.
  17.  
  18. * offsetUnset($offset)
  19.  
  20. This method is used when a value is removed from
  21. an array either through unset() or assigning the key
  22. a value of null. In the case of numerical arrays, this
  23. offset should not be deleted and the array should
  24. not be reindexed unless that is specifically the
  25. behavior you want.
  • IteratorAggregate界面
  • RecursiveIterator界面
这个界面用于遍历多层数据,继承了Iterator界面,因而也具有标准的current()/key()/next()和valid()方法。同时它自己还规定了getChildren()和hasChildren()方法。
  • SeekableIterator界面
SeekableIterator界面也是Iterator界面的延伸,除了Iterator的五个方法以外,还规定了seek()方法,参数是元素的位置,返回该元素。若该位置不存在,则抛出OutOfBoundsException。
  • Countable界面
这个界面规定了一个count()方法,返回结果集的数量
 
3.SPL Classes
  • spl内置类
  查看所有内置类 
  1. foreach(spl_classes() as $key=>$val){
  2. echo $key."=>".$val.'<br/>';
  3. }
  • DirectoryIterator类
        这个类用来查看一个目录中所有文件和子目录
  1. foreach(new DirectoryIterator('./') as $Item)
  2. {
  3. echo $Item.'<br/>';
  4. }
  5. catch(Exception $e)
  6. {
  7. echo 'No files Found!';
  8. }
  • ArrayObject类
        此类将Array转换为Object
  • ArrayIterator类
        这个类实际上是对ArrayObject类的补充,为后者提供遍历功能。也支持offset类方法和count()方法
  • RecursiveArrayIterator类和RecursiveIteratorIterator类
        ArrayIterator类和ArrayObject类,只支持遍历一维数组,如果要遍历多维数组,必须先用RecursiveIteratorIterator生成一个Iterator,然后再对这个Iterator使用RecursiveIteratorIterator
  • FilterIterator
        FilterIterator类可以对元素进行过滤,只要在accept()方法中设置过滤条件就可以了。
  • SimpleXMLIterator类
        这个类用来遍历xml文件
  • CachingIterator类
        这个类有一个hasNext()方法,用来判断是否还有下一个元素
  • LimitIterator类
        这个类用来限定返回结果集的数量和位置,必须提供offset和limit两个参数,与SQL命令中的limit语句类似
  • SplFileObject类
        这个类用来对文本文件进行遍历
 
 
 

php spl库的使用(PHP标准库)【摘抄引用】的更多相关文章

  1. ca72a_c++_标准IO库:面向对象的标准库

    /*ca72a_c++_标准IO库:面向对象的标准库继承:基类->派生类3个头文件9个标准库类型IO对象不可复制或赋值 ofstream, f--file,文件输出流ostringstream, ...

  2. 【转】C++标准库和标准模板库

    C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费 ...

  3. c++标准库

    Technical Report 1不是正式的库只是一个草案,作为C++ 2003标准的附加库被大多数编译器厂商所支持,它是个过渡性质的库,其实现将会作为C++11标准的一部分.很多编译器对C++11 ...

  4. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  5. Python标准库——走马观花

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...

  6. c标准库和运行时库

    c运行时库与c标准库的区别 c标准库包括常用的数学函数.字符串操作函数等等,这些函数都是由编程高手写的,效率高,很少出错,而且是完全符合c语言标准的函数. c运行库可以说是c标准库的扩展集,它是完全包 ...

  7. C++标准库和标准模板库

    转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标 ...

  8. C++著名类库和C++标准库介绍

    C++著名类库 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost 3.C++各大有名库的介绍——GUI 4.C++各大有名库的介绍——网络通信 5.C++各 ...

  9. 16.C++-初探标准库

    在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...

  10. C++标准库和标准模板库(转)

    转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标 ...

随机推荐

  1. Druid时序数据库常见问题及处理方式

    最近将Druid-0.10.0升级到Druid-0.12.1的过程中遇到一些问题,为了后期方便分析问题和及时解决问题,特此写这篇文章将工作中遇到的Druid问题及解决办法记录下来,以供其他人借鉴,其中 ...

  2. 【python3.X】python学习中排雷过程^_^

    问题一:python读取文件时报错:“UnicodeDecodeError: 'gbk' codec can't decode byte 0x8d in position 52: illegal mu ...

  3. rails 中 preload、includes、Eager load、Joins 的区别

    Rails 提供了四种不同加载关联数据的方法.下面就来介绍一下. 一.Preload Preload 是以附加一条查询语句来加载关联数据的 User.preload(:posts).to_a # =& ...

  4. Python 3基础教程28-内置函数

    本文介绍Python中的内置函数,Python中有很多内置的,功能强大的函数,可以帮我们解决很多问题,有些方法,根本不需要你去再次编写实现函数,你直接调用就可以.在这之前,需要介绍下,如何在windo ...

  5. 第二篇 Postman的高阶使用之配置全局变量及局部变量的调用及设置方法(手动方法)

    第五篇主要写了关于postman的基本使用,重点是如果发送json请求,为什么要将发送json请求呢, 一是目前大多数的请求已经倾向于发送json格式,二是本人太懒了,不想一个字段一个字段的添加到参数 ...

  6. BZOJ1270[BJWC2008]雷涛的小猫

    雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回到寝室,却 ...

  7. tomcat8编码设置和gc异常解决

    用startup.bat启动 编码解决: 用编辑器打开catalina.bat文件找到set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% " 更改为 se ...

  8. Python中send()和sendall()的区别

    Python中send()和sendall()的区别 估计每个学习Python网络编程的人,都会遇到过这样的问题: send()和sendall()到底有什么区别? send()和sendall()原 ...

  9. xshell连接不到虚拟机,安装ssh服务

    刚安装的虚拟机镜像是Ubuntu 16.04版本,防火墙已经关闭. 测试: 检查虚拟机分配的ip地址. 1.虚拟机ping宿主机:可以ping通 2.宿主机ping虚拟机:可以ping通 3.检查网络 ...

  10. tensorflow学习笔记(2)-反向传播

    tensorflow学习笔记(2)-反向传播 反向传播是为了训练模型参数,在所有参数上使用梯度下降,让NN模型在的损失函数最小 损失函数:学过机器学习logistic回归都知道损失函数-就是预测值和真 ...