1

我正在寻找 PHP 中的只读集合。我已经搜索过了,但我还找不到本机实现。我认为我绝对不是第一个需要这样的程序员:

我的情况如下:一个购物车类包含许多购物车项目。cartItems 应该只能通过购物车编辑(它是聚合根)。要显示这些项目,我的购物车需要返回一个集合类型。(此集合中的项目已设为只读)。我更喜欢通过引用传递集合,因此共享集合始终是最新的。(甚至认为我在提取集合后删除/添加了一个项目)。

这些项目存储在购物车的 ArrayObject 中。是否有一个本机类将 ArrayObject 包装为只读?如果没有,这种包装器是否存在于另一种类型的集合中,还是我需要自己编写?

4

2 回答 2

1

您很可能需要自己编写它,利用private类中可用的属性类型。我认为,这是唯一可行的方法。请记住,即使这也不是万无一失的,因为您可以使用反射绕过它。尽管如此,它仍然遵循通常的格言:如果有人想打破它,他们就会打破它。

将您的 ArrayObject 包装为更大类的私有属性,并且只允许通过类的方法(静态或动态,无关紧要)访问对象。这将为您尝试做的事情提供最接近的匹配,因为它允许您人为地让读取(想到魔术方法 __get())而不是写入。

于 2012-11-19T19:28:44.017 回答
1

在这次讨论中,我有一个想法可以解决我的问题:我让我的购物车实现 Iterator。所以我的视图能够显示我的购物车及其物品。结果,购物车总是返回只读的 cartItemObjects。所以我永远不需要发布一个集合。感谢您的参与!

于 2012-11-19T19:53:56.743 回答