Ich habe eine Superklasse User, von der sich ein paar Subtypen ableiten:
class Admin extends User { ... }
class Redakteur extends User { ... }
class Noob extends User { ... }
Im Controller beim Anlegen eines neuen Objektes weiß ich anhand der Auswahl schon, welches neue Objekt erstellt werden muss. Ich wollte das ganze aber nicht mit Switch bzw. einer if-Abfrage machen wollte. Meine verschiedenen Usertypen gibt es als Tabelle mit einem Usertyp pro Zeile. Der hat eine ID, einen Namen und, wichtig, eine Spalte „classname“.
id | name | |
---|---|---|
1 | Administrator | Admin |
2 | Redakteur | Redakteur |
3 | Darf gar nichts | Noob |
Und damit ich nun das neue Objekt anhand dieser classnames erstellen kann, benutze ich die ReflectionClass:
$tmp2 = new \ReflectionClass('Pack\UserBundle\Entity\\'.$group->getClassname());
$user = $tmp2->newInstance($exists);
Und $user ist damit vom jeweiligen Typ des $group Eintrags.