Php 选择什么样的学说继承?

Php 选择什么样的学说继承?,php,symfony,inheritance,doctrine-orm,concrete-inheritance,Php,Symfony,Inheritance,Doctrine Orm,Concrete Inheritance,我很难决定什么样的学说继承适合我的项目。目标是让虚拟机VM拥有多个软件PHP、MySQL等等……这些软件中的每一个都有一个不同的类和一些共同的字段。我首先尝试将VM类a与每个软件类联系起来,它工作得很好: 但是现在我想使用一个抽象类“Software”,我的所有软件都将从中继承,并且在我的VM类中只有一个$Software属性。通过这种方式,将来添加一个新的软件类(继承自软件)将更加容易。我的抽象类“软件”链接到虚拟机VM类: 我试图在我的软件类上添加@ORM\SuperMappedClass注

我很难决定什么样的学说继承适合我的项目。目标是让虚拟机VM拥有多个软件PHP、MySQL等等……这些软件中的每一个都有一个不同的类和一些共同的字段。我首先尝试将VM类a与每个软件类联系起来,它工作得很好:

但是现在我想使用一个抽象类“Software”,我的所有软件都将从中继承,并且在我的VM类中只有一个$Software属性。通过这种方式,将来添加一个新的软件类(继承自软件)将更加容易。我的抽象类“软件”链接到虚拟机VM类:


我试图在我的软件类上添加@ORM\SuperMappedClass注释,但后来我没有找到访问子类的方法。这是这个特殊案件的最佳继承原则吗?具体的表继承是更好的选择吗?我甚至不知道具体的继承是否可行,因为文档中没有详细说明。

在映射的超类中使用protected而不是private谢谢。这并不能解决问题,但却是完全正确的
/**
* Class VM
*/
class VM
{

/**
 * @var \AppBundle\Entity\MySQL
 *
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\MySQL", cascade={"persist"})
 *
 */
private $mysql;

/**
 * @var \AppBundle\Entity\PHP
 *
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\PHP", cascade={"persist"})
 *
 */
private $php;

...
and other softwares, always the same
}
/**
* Class Software
*/
abstract class Software {
 /**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
 private $id;

/**
* @var string
 *
 * @ORM\Column(name="version", type="string", length=255, nullable=true)
 */
private $version;

/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\VM")
*/
private $VM;
}