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

时间:2012-07-07 22:24:32

标签: php spl

我正在检查标准PHP库(SPL)。我之前只使用过数组,刚才发现PHP有很多标准类。但手册中没有任何词语是否建议使用它。例如,他们明确建议使用foreach构造来迭代数组,因为它更快。那图书馆怎么样?如果我需要在对象中存储一些数据,我是否应该根据我的情况使用一些具体的SPL类,或者使用标准数组是否更好?

1 个答案:

答案 0 :(得分:30)

你的问题有很多。你应该使用SPL数据结构吗?这取决于。

PHP数组可以充当地图,链表或数组。您实际上很少需要单个数据类型同时充当所有这些内容,因此SPL数据类型的重点特性不是那么有限。事实上,大多数“局外人”(以及一些“内部人士”)会认为PHP的数组是一种讽刺。

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

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

那说:

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

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

  • 如果您需要将包含对象的映射作为键,则使用SplObjectStorage(因为PHP数组不能与对象键一起使用)。

  • 如果您想在数组中保存数据,请尝试其中一个。

对原生数组与SPL对象进行基准测试,并使用适合您的内存+速度+简单权衡。