在PHP中创建集合类的目的是什么?

时间:2012-04-08 21:06:48

标签: php collections

我一直在阅读Alejandro Gervasio的优秀服务层系列:http://www.devshed.com/cp/bio/Alejandro-Gervasio/我注意到他也是支持PHP Collections的开发人员之一,如http://www.devshed.com/c/a/PHP/PHP-Service-Layers-Handling-Entity-Collections/1/

为什么?为什么要创建一个通过使用数组本身来模拟简单关联数组的类?

2 个答案:

答案 0 :(得分:10)

我没看过这篇文章,但我可以告诉你为什么我这样做呢:

  1. 搜索/排序/访问:我可以抽象搜索,过滤和访问集合中我想要的项目,而无需使用特殊方法访问数据库,也不依赖于单个数组键。
  2. 如果您可以传入Entity或EntityCollection接口,则更容易插入实体管理界面 - 此处您可以再次封装在集合中的功能,以便对多个实体执行操作。并不是说你不能在一个循环中这样做,但它可以让你隐藏它并为不同的集合类做出特定的事情。)
  3. 集合序列化 - 自定义序列化(考虑选择特定属性)以序列化为特定的字符串格式。
  4. 您仍然可以轻松支持数组接口以进行基本访问和迭代。

答案 1 :(得分:1)

如果我可以用我在学说2中观察到的内容来完成答案:

使用Doctrine,您可以使用Collection界面而不关心它是如何工作的。界面提供了过滤,排序等方法......

但Doctrine提供了名为Collection的{​​{1}}的实现。您甚至不知道您正在使用它,因为您使用了界面,但是使用此特殊集合,Doctrine将能够在您对集合进行过滤/搜索/排序时智能且透明地进行数据库查询。它还将使Doctrine仅在访问它们(延迟加载)时加载集合的内容(对象列表),这有助于获得性能。

对于PHP数组,这是不可能的,您必须从数据库中完全加载它,然后执行操作。