php spl 使用场景,PHP标准库介绍(SPL)

编程入门 行业动态 更新时间:2024-10-26 02:35:38

php spl 使用<a href=https://www.elefans.com/category/jswz/34/1770727.html style=场景,PHP标准库介绍(SPL)"/>

php spl 使用场景,PHP标准库介绍(SPL)

PHP标准库介绍(SPL)

PHP的SPL库是用于解决一些常见问题的接口与类的集合。SPL库基本包括数据结构,迭代器,接口,异常,SPL函数,文件处理和其它类及接口。熟练掌握SPL库可以帮助我们写出更为简洁和高效的代码。

数据结构

SPL提供的数据结构包括双向链表、栈、队列、堆、最大堆、最小堆、优先队列、固定数组和对象容器。对应的类为:SplDoublyLinkedList、SplStack、SplQueue、SplHeap、SplMaxHeap、SplMinHeap、SplPriorityQueue、SplFixedArray、SplObjectStorage。下面将以代码的形式依次说明每个类的基础用法。

SplDoublyLinkedList

用数组模拟的双向链表。

$linkedList = new SplDoublyLinkedList();

$data = ["jackie", "tom", "tony", "john"];

for($i=0, $len = count($data); $i < $len; $i++){

// index索引是从0开始,且索引只能为整数

$linkedList->add($i, $data[$i]);

}

$linkedList->push("lily");

foreach ($linkedList as $key=>$value){

echo "key: {$key} => value: {$value}\n";

}

echo "elem count: " . $linkedList->count() ."\n";

echo "first elem: " . $linkedList[0] . "\n";

SplStack

使用双向链表模拟栈的特性。

$st = new SplStack();

$data = ["jackie", "tom", "tony", "john"];

foreach ($data as $value){

$st->push($value);

}

echo $st->pop();

SplQueue

使用双向链表模拟队列的特性。

$queue = new SplQueue();

$data = ["jackie", "tom", "tony", "john"];

foreach ($data as $value){

$queue->enqueue($value);

}

echo $queue->dequeue();

SplHeap

堆数据结构,是抽象类,需要实现compare方法。一般用于自定义的数据类型。对于常见的数据类型,可以使用SplmaxHeap或SplMinHeap。

class MaxHeap extends SplHeap{

//针对标量的最大堆

public function compare($value1, $value2)

{

return ($value1 - $value2);

}

}

$maxHeap = new MaxHeap();

for ($i=0; $i < 100; $i++){

$maxHeap->insert(rand(1, 9999));

}

echo $maxHeap->top();

$maxHeap->extract();

echo $maxHeap->top();

对于SplMaxHeap和SplMinHeap可参考上述代码。

SplPriorityQueue

使用最大堆实现的优先队列,用法和最大堆一样。

SplFixedArray

固定长度的数组,和一般数组的区别主要就在于该数组的长度是固定的并且仅允许整数作为索引。该数据相对于一般数组而言,性能较好。

// 数组的长度可以在使用中动态改变。

$arr = new SplFixedArray(10);

for($i=0; $i<9; ++$i){

$arr[$i] = rand(1, 999);

}

var_dump($arr);

echo $arr->getSize() . "\n";

echo $arr[2] . "\n";

$arr->setSize(2). "\n";

var_dump($arr);

echo $arr[2]. "\n";

SplObjectStorage

该数据结构可以实现对象的数据的映射,以PHP中数组为比较的话,就是说可以将对象作为索引。

$s = new SplObjectStorage();

$o1 = new StdClass;

$o2 = new StdClass;

$o3 = new StdClass;

$s[$o1] = "data for object 1";

$s[$o2] = array(1,2,3);

if (isset($s[$o2])) {

var_dump($s[$o2]);

}

迭代器

该部分主要提供了各种特性的迭代器,方便日常的开发。由于较多,这里只是列出各个迭代器的功能,不提供相关的代码参考。

迭代器名

功能

AppendIterator

连续遍历多个迭代器

ArrayIterator

数组遍历的迭代器,但可以在迭代时更新数组中元素

CachingIterator

支持在另外一个迭代器中缓存迭代操作

CallbackFilterIterator

支持回调函数的迭代

DirectoryIterator

遍历目录

EmptyIterator

空迭代器

FilesystemIterator

文件系统遍历,可以获取详细信息

FilterIterator

支持过滤操作的迭代器

GlobIterator

遍历一个文件系统,行为类似于glob

InfiniteIterator

自动执行rewind

IteratorIterator

将Traversable转为Interator

LimitIterator

仅遍历子集

MultipleIterator

有序遍历所有迭代器

NoRewindIterator

不能执行rewind

ParentIterator

递归遍历

RecursiveArrayIterator

RecursiveCachingIterator

RecursiveCallbackFilterIterator

RecursiveDirectoryIterator

RecursiveFilterIterator

RecursiveIteratorIterator

RecursiveRegexIterator

RecursiveTreeIterator

RegexIterator

关于迭代器部分,由于时间有限未完全理解所有迭代器的功能,后续将会逐渐完善。

接口

接口部分包括Countable、OuterIterator、RecursiveIterator和SeekableIterator。

异常

异常名

作用

BadFunctionCallException

函数调用错误

BadMethodCallException

回调错误

DomainException

域名错误

InvalidArgumentException

无效的参数

LengthException

长度异常

LogicException

逻辑异常

OutOfBoundsException

key越界

OutOfRangeException

index越界

OverflowException

溢出

RangeException

RuntimeException

运行时异常

UnderflowException

对空容器进行操作时发生

UnexpectedValueException

值非预期时发生

更多推荐

php spl 使用场景,PHP标准库介绍(SPL)

本文发布于:2024-03-08 06:09:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720019.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:场景   标准   spl   php   PHP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!