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