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

在PHP中创建集合类的目的是什么?,php,collections,Php,Collections,我一直在这里阅读Alejandro Gervasio的优秀服务层系列:我注意到他也是喜欢PHP集合的开发人员之一,比如 为什么呢?为什么要创建一个类,通过使用数组本身来模拟简单的关联数组?我没有读过这篇文章,但我可以告诉你我为什么要这样做: 搜索/排序/访问:我可以抽象搜索、筛选和访问集合中我想要的项,而无需使用特殊方法进入数据库,也无需依赖单个数组键 如果您可以传入和实体或EntityCollection接口,则插入到实体管理接口会更容易—同样,在这里,您可以在集合中封装功能,以便对多个实体执

我一直在这里阅读Alejandro Gervasio的优秀服务层系列:我注意到他也是喜欢PHP集合的开发人员之一,比如


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

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

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

  • 如果我可以用我在原则2中观察到的内容来完成回答:

    对于条令,您使用
    集合
    界面,而不关心它是如何工作的。该接口提供过滤、排序等方法

    但条令提供了名为
    PersistentCollection
    集合的实现。您甚至不知道自己在使用它,因为您使用的是界面,但是有了这个特殊的集合,当您对集合进行筛选/搜索/排序时,Doctrine将能够智能、透明地进行数据库查询。它还将允许条令仅在访问集合(对象列表)时加载集合的内容(延迟加载),这有助于提高性能


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

    我曾经读过一本关于高级PHP oop技术的书,书中详细介绍了这一点。显然,他们这样做是因为它允许你使用一个对象本身,比如一个数组。仅供参考,你可以将“php oop”缩写为“poop”。关于第1点,一个组成良好的动态查询不需要进行排序和搜索吗?此外,我通常在实用程序类中编写助手函数,用于按属性或元素进行二维排序,然后可以从任何地方调用这些函数。我的意思是,我知道如何将其抽象到collection类中,从我的角度来看,这似乎是开销。请列举第2点和第3点的例子好吗?