【SPL】PHP标准类库

需求知识:

  • 熟悉和了解数据结构的基本概念
  • 熟悉PHP代码的编写
  • 熟悉面向对象的概念

什么是SPL

Standard PHP Library 标准PHP类库,官方定义:The standard PHP library(SPL)is a collection ofinterfaces and classes that are meant to solve common problems。用于解决典型问题的一组接口与类的集合。

典型问题:

  1. 数学建模/数据结构(解决数据怎么存储的问题)
  2. 元素遍历(数据怎么查看的问题)
  3. 常用方法的统一调用(通用方法,集合的大小)
  4. 类定义在自动装载(让PHP程序自动适应大型项目的管理要求,把功能实现分散到不同文件中)

包含的内容:

数据结构,基础接口,基础函数,迭代器,异常和其他。

SPL的常用数据结构

什么是数据结构?

数据结构是计算机存储,组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。解决的是软件开发过程中的数据如何存储和表示的问题。

SPL提供哪些数据结构:

双向链表,堆栈,队列,堆,降序堆,升序堆,优先级队列,定长数组,对象容器。

双向链表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码测试:
在这里插入图片描述
测试代码
在这里插入图片描述
cmd命令行运行的结果
在这里插入图片描述
总结

堆栈(FILO first in last out):先进后出,后进先出

  • 实现方法:继承自SplDoublyLinkedList类的SplStack类
  • 操作:

push(压入堆栈,存入)

pop(退出堆栈、取出)

在这里插入图片描述

代码部分
在这里插入图片描述
运行结果

队列:(FIFO first in first out)队列和堆栈刚好相反,先进先出

  • 实现方法:继承自SplDoublyLinkedList类的SplQueue类
  • 操作:

enqueue(进入队列)

dequeue(退出队列)

在这里插入图片描述
在这里插入图片描述

SPL的常用迭代器

什么是迭代器?(Iterator接口定义)

通过某种统一的方式遍历链表或者数组中的元素的过程叫做迭代遍历,而这种统一的遍历哦工具我们叫做迭代器。

ArrayIterator:用于遍历数组
在这里插入图片描述
在这里插入图片描述
AppendIterator:能陆续遍历几个迭代器
在这里插入图片描述
MultipleIterator:用于把多个Iterator里面的数据和成为一个整体来访问
在这里插入图片描述
FilesystemIterator:能遍历文件系统
在这里插入图片描述

SPL接口简介

Countable:在自定义的类中也可以直接用count()
在这里插入图片描述
OuterIterator: 如果想对迭代器进行一定的处理后再返回,可以用这个接口,IteratorIterator是OuterIterator的实现,扩展的时候可以直接继承IteratorIterator。

在这里插入图片描述

RecursiveIterator: 可以对多层结构的迭代器进行迭代,比如遍历一棵树,可以所有具有层次结构特点的数据都可以用这个接口遍历,如文件夹。

关键方法:

  • hasChildren:判断当前节点是否含有子节点
  • getChildren:得到当前节点子节点的迭代器
  • SeekableIterator:可以通过seek()方法定位到集合里面的某个特定的元素,参数从零开始计算

SPL函数的使用

什么是autoload?

为了初始化PHP中的类对象,需要通过一定的方法寻找到类的定义。通常情况下,类会定义在一个单独的文件中。autoload就是PHP找到这些类的方法。

spl_autoload_extensions — 注册并返回spl_autoload函数使用的默认文件扩展名。

set_include_path — 设置 include_path 配置选项

get_include_path — 获取当前的 include_path 配置选项

spl_autoload_register — 注册给定的函数作为 __autoload 的实现

在这里插入图片描述

_autoload(); 自动加载类
在这里插入图片描述
自定义自动加载类时:
在这里插入图片描述
类载入的基本流程:
在这里插入图片描述
其他函数:
在这里插入图片描述

SPL的文件处理类库:

SplFileInfo: 用于获得文件的基本信息,比如修改时间,大小,目录等信息。

SplFileObiect: 用于操作文件的内容,比如读取、写入

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33055907/article/details/90168756