PHP SPL,是值得使用还是原始数组函数更好?

2022-08-30 18:28:35

我正在检查标准PHP库(SPL)。我以前只使用数组,现在发现PHP有这么多标准类。但是手册中没有任何文字建议是否使用它。例如,他们明确建议使用构造来迭代数组,因为它更快。那么这个库呢?如果我需要在对象中存储一些数据,我应该使用一些具体的SPL类来满足我的情况,还是使用标准数组更好?foreach


答案 1

你的问题有很多。是否应使用 SPL 数据结构?这要视情况而定。

PHP 数组可以充当映射、链接列表或数组。您实际上很少需要同时充当所有这些事物的单个数据类型,因此SPL数据类型的集中性质并不那么有限。事实上,大多数“局外人”(和一些“内部人士”)会认为PHP的数组是一种嘲讽。

PHP数组的主要缺点是它使用了大量的内存。即使您只想要一个固定的、顺序的、索引的数组,您也有将事物链接在一起和存储密钥的开销。尽管如此,PHP的数组通常比对象类型快得多,如果你主要是追加数据并迭代它,可能是因为函数调用减慢了速度。

一般来说,我没有看到很多人使用SPL数据结构。我认为,大多数情况下,因为在PHP和Web应用程序的上下文中,它们通常不是很适用。您通常处理的是小型数组,其中内置运算符和数组函数的便利性超过了 SPL 类型的任何优点。

可是:

  • 如果您发现自己处于使用数组作为链表(在中间插入/删除)的情况,请尝试使用SPL双链表之一。

  • 如果您发现自己使用的是大型索引数组,请尝试 .它们肯定会消耗更少的内存。SPLFixedArray

  • 如果您需要以对象作为键的映射,请使用 a(因为 PHP 数组不适用于对象键)。SplObjectStorage

  • 如果要保持数据在数组中的排序,请尝试其中一个堆。

对本机数组与 SPL 对象进行基准测试,并使用具有适合您的内存 + 速度 + 简单性权衡的任何一个。


答案 2

推荐