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