Php Doctrine2:单表继承中的父类应该是抽象的吗?

Php Doctrine2:单表继承中的父类应该是抽象的吗?,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,我正在为Doctrine2应用程序中的类编写构造函数,比如水果、苹果、香蕉 水果是父类,其中苹果和香蕉使用字段类型上的单表继承从水果继承 在Doctrine2文档页面上,提供了一个单表继承的示例。如果我们总是使用单表继承进行区分,那么基类Fruits是否应该是抽象的,因为必须始终设置鉴别器字段?如果是这样,是否应该保护水果的构造函数以防止这种行为?由于父类“水果”中没有需要重新声明的方法,我认为没有明确的必要将其声明为抽象 此外,您可能会发现一个用例,其中您可能希望持久化“水果”的实例(不确定它

我正在为Doctrine2应用程序中的类编写构造函数,比如水果、苹果、香蕉

水果
是父类,其中
苹果
香蕉
使用字段
类型
上的单表继承从
水果
继承


在Doctrine2文档页面上,提供了一个单表继承的示例。如果我们总是使用单表继承进行区分,那么基类
Fruits
是否应该是抽象的,因为必须始终设置鉴别器字段?如果是这样,是否应该保护
水果的构造函数以防止这种行为?

由于父类“水果”中没有需要重新声明的方法,我认为没有明确的必要将其声明为抽象

此外,您可能会发现一个用例,其中您可能希望持久化“水果”的实例(不确定它是什么类型的水果)。将父对象标记为抽象对象将阻止您执行此操作

也许水果是个坏例子。但文档中的个人示例更好。员工将继承人员定义。但我也可能只想保留Person的一个实例,类型待定。因此@DiscriminatorMap中的“person”=“person”


谢谢!我意识到我没有抓住文档中区分父对象的微妙之处。对于我的应用程序,我不想要一个超类类型,我希望它是一个子类,所以也许在这种情况下它是可以的?如果你觉得父类永远不应该被实例化,我个人会将构造函数设置为私有的。但是,是的,根据您的应用程序需求塑造您的实体,这就是它们的目的。此外,鉴别器字段由条令内部使用。应该永远不需要设置/获取此项。