目前我在我的项目中使用与存储无关的模式。这种模式非常简单:我有我的Model\Model
和我的特定存储层,它扩展了Model\Model
(如Entity\Model
和Document\Model
)。
我面临的问题是多态对象。如果我不扩展实体 Doctrine 无法识别继承映射。这样,我需要为每个存储层复制我的代码:
class Model\Option {}
class Model\OptionNumber extends Option {}
class Entity\Model extends Model\Option {}
我想拥有:
class Entity\OptionNumber extends Model\OptionNumber{}
但这是不可能的。一旦 PHP 不支持多重继承,我必须在 Entity\OptionNumber 中进行编码。
有没有解决这个问题的模式?
仅供参考,我使用的是 Doctrine 2.2 和 Symfony 2.3。
当然!
模型:
abstract class Option implements OptionInterface
{
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $name;
/**
* @var string
*/
protected $presentation;
/**
* @var Collection of OptionChoiceInterface
*/
protected $choices;
}
实体:
class Option extends BaseOption
{
}
文档:
class Option extends BaseOption
{
}