2012-03-28 6 views
0

У меня есть объект Parent с двумя дочерними объектами (Foo и Bar), реализующий наследование SINGLE_TABLE.Установка дискриминатора динамически в Doctrine2

Возможно ли создать объект new Parent() и динамически установить его дискриминатор на foo вместо создания new Foo()?

+0

Нет, это не представляется возможным, по крайней мере, без уродливых хаков. Почему вы хотите это сделать? – Benjamin

+0

У меня есть сценарий, где я получаю строку, представляющую дискриминатор, и мне нужно создать объект такого типа. Я создал метод для этого, просто хотел узнать, есть ли лучший способ. – tamir

ответ

0

Нет, нет, если вам действительно нужно сценарий, упомянутый в свой комментарий, то вы, вероятно, лучше с какой-то метод фабрики:

abstract class MyParent 
{ 
    public static function fromString($type) 
    { 
     switch ($type) { 
      case 'foo': 
       return new Foo(); 
      case 'bar': 
       return new Bar(); 
     } 
     throw new DomainException('Unknown type: ' . $type); 
    } 
} 
+0

Спасибо :) btw, почему вы объявили абстрактный класс? – tamir

+0

Просто потому, что я предположил, что будут созданы только подклассы. Но если родительский класс также может быть создан, вы можете удалить ключевое слово «abstract»! – Benjamin

Смежные вопросы