我正在检查标准PHP库(SPL)。我之前只使用过数组,刚才发现PHP有很多标准类。但手册中没有任何词语是否建议使用它。例如,他们明确建议使用foreach
构造来迭代数组,因为它更快。那图书馆怎么样?如果我需要在对象中存储一些数据,我是否应该根据我的情况使用一些具体的SPL类,或者使用标准数组是否更好?
答案 0 :(得分:30)
你的问题有很多。你应该使用SPL数据结构吗?这取决于。
PHP数组可以充当地图,链表或数组。您实际上很少需要单个数据类型同时充当所有这些内容,因此SPL数据类型的重点特性不是那么有限。事实上,大多数“局外人”(以及一些“内部人士”)会认为PHP的数组是一种讽刺。
PHP数组的主要缺点是它使用了大量内存。即使您只想要一个固定的,顺序的索引数组,您也需要将链接在一起的开销和密钥存储。尽管如此,PHP的数组通常比对象类型快得多,如果你主要是附加数据并迭代它,可能是因为函数调用会减慢速度。
通常,我没有看到很多人使用SPL数据结构。大多数情况下,我认为,因为在PHP和Web应用程序的上下文中,它们通常不太适用。您通常在处理小型数组,其中内置运算符和数组函数的便利性超过了SPL类型的任何优点。
那说:
如果您发现自己处于使用数组作为链接列表(在中间插入/删除)的情况,请尝试使用其中一个SPL双向链接列表。
如果您发现自己使用的是大型索引数组,请尝试使用SPLFixedArray
。它们肯定会消耗更少的内存。
如果您需要将包含对象的映射作为键,则使用SplObjectStorage
(因为PHP数组不能与对象键一起使用)。
如果您想在数组中保存数据,请尝试其中一个。
对原生数组与SPL对象进行基准测试,并使用适合您的内存+速度+简单权衡。