我有两节课。 OneToMany关系中的父母与子女。 Parent有一个名为$ children的数组,它存储Child实例。 Child具有私有$ name属性,具有公共getter / setter方法。我想要有独特名字的孩子。
我解决这个问题的方法是,我将父实例传递给Child的构造函数方法,将其存储在$ _my_parent中,并将其存储在Child的setName($ name)方法中。 Parent实例循环所有子节点并检查是否可以使用$ name。
非常直接。
Q1:这显然会产生无限递归。那是问题吗?序列化时?
Q2:还有另一种方法吗?
答案 0 :(得分:2)
虽然这种方式100%保证数据完整性在理论上可能是好的,但在实践中它无论如何都无法实现。您始终可以在对象上设置属性,使其不唯一,例如使用Reflection
API。
我保持简单:
只要在必要时明确调用此验证方法,无论何时修改孩子,都不要自动触发。它摆脱了很多复杂性和问题,而且缺点很少。