热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpspl库的使用

1.SPL是什么?SPL:standardphplibraryphp标准库,此从php5.0起开始内置的组件和接口,在5.3以后逐渐成熟。因为内置在php5开发环境中,无需

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界面包含以下必须部署的五个方法:

  • current()

    This method returns the current index's value. You are solely
    responsible for tracking what the current index is as the
    interface does not do this for you.

    • key()

      This method returns the value of the current index's key. For
      foreach loops this is extremely important so that the key
      value can be populated.

    • next()

      This method moves the internal index forward one entry.

    • rewind()

      This method should reset the internal index to the first element.

    • valid()

      This method should return true or false if there is a current
      element. It is called after rewind() or next().

ArrayAccess界面
部署ArrayAccess界面,可以使object像Array那样操作,但是必须包含四个必须部署的方法

  • offsetExists($offset)
    This method is used to tell php if there is a value
    for the key specified by offset. It should return
    true or false.
  • offsetGet($offset)
    This method is used to return the value specified
    by the key offset.
  • offsetSet($offset, $value)
    This method is used to set a value within the object,
    you can throw an exception from this function for a
    read-only collection.
  • offsetUnset($offset)
    This method is used when a value is removed from
    an array either through unset() or assigning the key
    a value of null. In the case of numerical arrays, this
    offset should not be deleted and the array should
    not be reindexed unless that is specifically the
    behavior you want.
    IteratorAggregate界面
    RecursiveIterator界面
    这个界面用于遍历多层数据,继承了Iterator界面,因而也具有标准的current()/key()/next()和valid()方法。同时它自己还规定了getChildren()和hasChildren()方法。
    SeekableIterator界面
    SeekableIterator界面也是Iterator界面的延伸,除了Iterator的五个方法以外,还规定了seek()方法,参数是元素的位置,返回该元素。若该位置不存在,则抛出OutOfBoundsException。
    Countable界面
    这个界面规定了一个count()方法,返回结果集的数量
    3.SPL Classes
    spl内置类
    查看所有内置类
    foreach(spl_classes() as $key=>$val){
    echo $key."=>".$val.'
    ';
    }
    DirectoryIterator类
    这个类用来查看一个目录中所有文件和子目录
    foreach(new DirectoryIterator('./') as $Item)
    {
    echo $Item.'
    ';
    }
    catch(Exception $e)
    {
    echo 'No files Found!';
    }

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类
这个类用来对文本文件进行遍历


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
author-avatar
花长好月常圆人长久
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有