我正在检查标准 PHP 库 (SPL)。以前只用过数组,现在才发现PHP有这么多标准类。但是说明书上并没有说推荐使用与否。例如,他们明确建议使用foreach
构造来迭代数组,因为它更快。那么这个图书馆呢?如果我需要在对象中存储一些数据,我应该针对我的情况使用一些具体的 SPL 类还是使用标准数组更好?
1 回答
你的问题有很多。您应该使用 SPL 数据结构吗?这取决于。
PHP 数组可以用作映射、链表或数组。您实际上很少需要同时充当所有这些事物的单一数据类型,因此 SPL 数据类型的重点本质并没有那么限制。事实上,大多数“局外人”(和一些“局内人”)会认为 PHP 的数组是一种讽刺。
PHP 数组的主要缺点是它使用大量内存。即使你只想要一个固定的、顺序的、索引的数组,你也会有将事物链接在一起和存储键的开销。尽管如此,如果您主要是附加数据并对其进行迭代,PHP 的数组通常比对象类型快得多,这可能是因为函数调用会减慢速度。
通常,我看不到很多人使用 SPL 数据结构。大多数情况下,我认为,因为在 PHP 和 Web 应用程序的上下文中,它们通常不太适用。您通常处理小型数组,其中内置运算符和数组函数的便利性超过了 SPL 类型的任何优势。
那说:
如果您发现自己处于使用数组作为链表的情况(在中间插入/删除),请尝试使用 SPL 双链表之一。
如果您发现自己使用大型索引数组,请尝试使用
SPLFixedArray
. 它们肯定会消耗更少的内存。如果您需要以对象为键的映射,请使用 a
SplObjectStorage
(因为 PHP 数组不适用于对象键)。如果您想在数组中保持数据有序,请尝试其中一个堆。
Benchmark the native array vs the SPL object and use whichever one has the memory + speed + simplicity tradeoff that suits you.