PHP 设计模式五 SPL标准库 栈 队列 堆 SplStack SplQuery SplMinHeap

197 阅读2分钟

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

课程背景

  • 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
  • 万物看本质基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远
  • 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
  • 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。

正文开始

SPL库提供了很多高级功能,这里介绍的是几个基本的方法的使用

数据结构栈特点是 先进后出

$stack = new SplStack();
$stack->push("tom");
$stack->push("jerry");
$stack->push("aimy");

if(!$stack->isEmpty()){echo $stack->pop();echo $stack->count();echo '<br>';}
if(!$stack->isEmpty()){echo $stack->pop();echo $stack->count();echo '<br>';}
if(!$stack->isEmpty()){echo $stack->pop();echo $stack->count();echo '<br>';}

因为SplStack继承自SplDoublyLinkedList类,所以一些基本的判断为空,判断数量的函数默认都是可以使用的。SplStack方法中只会编写自己类特有的方法。

SplDoublyLinkedList

队列

数据结构队列的特点是先进先出

$query = new SplQueue();
$query->enqueue("data1");
$query->enqueue("data2");

echo $query->dequeue();
echo $query->dequeue();

队列可能是我们平时接触最多的一种数据结构了,类似于抢购。先抢购到的人肯定是先去支付领奖的。我们通用的做法都是通过Redis去实现,因为Redis能记录并保存数据。而传统的基于PHP-FPM模式的请求,当请求完成脚本完成也就结束了,数据并不会持久的去记录下来。所以在这种PHP-FPM模式中,自带的这个数据结构好像很少用的。

我的理解 这个数据结构只会在 php-cli模式中被使用,因为那时候php的进程是常驻内存的。数据也就能保存起来。具体这个队列在哪里会用到,具体的使用方法,目前我还是在摸索中。

$heap = new SplMinHeap();
$heap->insert("data1");
$heap->insert("data2");

echo $heap->extract();
echo $heap->extract();

数组

$array = new SplFixedArray(10);
var_dump($array);