9

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

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

4

2 回答 2

10

我没有读过这篇文章,但我可以告诉你我为什么一般来说这样做:

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

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

使用 Doctrine,您可以使用Collection界面,而无需关心它是如何工作的。该接口提供过滤、排序、...

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

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

于 2012-11-23T10:14:00.410 回答