PHP 中的类似 Java 的集合

我正在学习PHP5(上次我检查PHP是在PHP4天),我很高兴看到PHP5 OO比PHP4更像Java,但是由于我的Java背景,仍然有一个问题让我感到非常不舒服:ARRAYS。

我正在阅读“Proffesional PHP6”(Wrox),它显示了自己的集合实现。我发现了其他的clases,比如基于SPL的 http://aheimlich.dreamhosters.com/generic-collections/Collection.phps 中的那个。我还发现 SPL(ArrayObject)中有某种集合

但是,我很惊讶,因为我并没有真正看到人们在PHP中使用集合,他们似乎更喜欢数组。

那么,在PHP中使用集合不是一个好主意,就像人们使用ArrayList而不是Java中的基本数组一样吗?毕竟,php数组并不像java数组。


答案 1

Java中的集合很有意义,因为它是一种强类型语言。收集“汽车”和另一个“摩托车”是有道理的。

但是,在PHP中,由于动态类型的性质,牺牲集合的形式性是很常见的。数组足以用作各种对象类型(汽车,摩托车等)的通用容器。此外,额外的好处来自数组可以很容易地发生突变(当没有适当的错误检查时,这有时可能是一个很大的缺点)。

我来自Java背景,我发现在PHP中使用集合设计模式并不能带来太多优势(没有多线程,没有内存分配的优化,没有迭代器等)。

如果您正在寻找这些优点中的任何一个,那么围绕数组构造一个包装类,实现每个功能(迭代器等)可能更好。


答案 2

我非常专业地收集PHP中的对象,它们可用于添加类型安全性,暗示易于使用的搜索,排序和操作功能,并表示正确的OO方法,而不是使用数组和大量有用但过程的函数,这些函数在整个源代码中以不同的模式操作它们。

我们有各种用于各种目的的集合,所有这些集合都整齐地继承了类型安全性,一致的编码标准和高水平的代码重用。

但是,它们都是阵列的内部!

我想这真的归结为选择,但是在我的面向对象的世界中,我喜欢在基类中保留易于重复的代码段,例如排序和搜索算法,并且我发现对象表示法更具自我记录性。


推荐