Php OOP:将对象克隆到子类

Php OOP:将对象克隆到子类,php,oop,inheritance,Php,Oop,Inheritance,下面是一个OOP设计/代码问题。 我会尽量简化我的问题来澄清。 我有一个PecCollection类,它表示Pec对象的集合(Pec是一种“Prise en charge”,描述它是什么并不重要。你可以将它视为一个人应该拥有的任何对象) 每一个Pec“属于”一个人,当一个人被创建时,它有他自己的Pec集合,列出他的所有Pec。PecCollection只是一个存储pec数组的类。 Pecs对象是从数据库中获取的数据创建的。 人员(0,1)--具有->Pec集合(1,n)--包含-->Pec 现在

下面是一个OOP设计/代码问题。 我会尽量简化我的问题来澄清。 我有一个PecCollection类,它表示Pec对象的集合(Pec是一种“Prise en charge”,描述它是什么并不重要。你可以将它视为一个人应该拥有的任何对象)

每一个Pec“属于”一个人,当一个人被创建时,它有他自己的Pec集合,列出他的所有Pec。PecCollection只是一个存储pec数组的类。 Pecs对象是从数据库中获取的数据创建的。

人员(0,1)--具有->Pec集合(1,n)--包含-->Pec

现在,我可能(但可能不)想列出每个Pec上的控件列表,并存储关于每个Pec的这些控件的数据(比如说“小时数”)

我可以做的只是在Pec类上添加一个“nbHours”属性,并将控件给出的nbHours存储在该属性中。 但是,我认为(也许我错了),这不是一个好方法:它将Pec类的责任(表示基本Pec)更改为几个责任(表示基本Pec和受控Pec)。 此外,并非所有的Pec都将得到控制

我可以创建一个从Pec继承的ControledPec类,并添加nbHours属性。这似乎是一个很好的解决办法。 我可以为每个人将这些对象存储在一个受控的PEC集合中


Person(0,1)--has-->PecCollection(1,n)--包含-->Pec多亏了Felipe,Decorator似乎是一个很好的解决方案。

基本Pec和受控Pec真的有根本性的不同吗?我会说不。一个Pec是否被控制应该由它的状态来决定。实现这一点的一种方法是使用Decorator模式(),但这似乎比仅仅给某个类多一点责任要复杂得多。我会选择El_Vanja解决方案。这可能是一个很好的解决方案,因为除了我给出的简化示例之外,还有一些来自PEC集合的计算数据。使用Decorator模式,我可以在不修改类的情况下扩展类功能。非常感谢。