2012-03-28 63 views
0

我有一個Parent實體,其中有兩個子實體(FooBar),用於實現SINGLE_TABLE繼承。在Doctrine2中動態設置鑑別器

是否有可能創建一個new Parent()實體並將其鑑別器動態設置爲foo而不是創建new Foo()

+0

不,這是不可能的,至少沒有醜陋的黑客。你爲什麼想這樣做? – Benjamin 2012-03-29 11:01:55

+0

我有一個場景,我得到一個字符串表示鑑別器,我需要創建一個該類型的實體。我爲此創建了一個方法,只是想知道是否有更好的方法.. – tamir 2012-03-29 11:29:41

回答

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 2012-03-30 09:00:15

+0

僅僅因爲我認爲只有子類會被實例化。但是,如果父類也可以實例化,那麼你可以刪除'abstract'關鍵字! – Benjamin 2012-03-30 10:28:30