【问题标题】:What is the purpose of creating collection classes in PHP?在 PHP 中创建集合类的目的是什么?
【发布时间】:2012-04-21 10:20:55
【问题描述】:

我一直在这里阅读 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/

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

【问题讨论】:

  • 我曾经读过一本关于高级 php oop 技术的书,它详细地谈到了这一点。显然他们这样做是因为它允许您像数组一样使用对象本身..
  • 您可以将“php oop”缩写为“poop”,仅供参考。

标签: php collections


【解决方案1】:

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

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

【讨论】:

  • 关于第 1 点 - 组合良好的动态查询不会负责排序和搜索吗?此外,我通常在实用程序类中编写辅助函数,用于按属性或元素进行 2D 排序,然后可以从任何地方调用。我的意思是我看到你可以如何将它抽象到集合类中,从我的角度来看,这对我来说似乎是开销。请您列举第 2 点和第 3 点的示例吗?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2015-11-17
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多