如何将超类实例转换为子类实例? (学说)

时间:2016-01-14 11:10:14

标签: php symfony inheritance doctrine-orm

我想使用Class Table Inheritance

/**
 * @Entity
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"player" = "Player", "admin" = "Admin"})
 */
class User
{
    // ...
}

/** @Entity */
class Player extends User
{
    // ...
}

/** @Entity */
class Admin extends User
{
    // ...
}

我的问题是:

如果我有一个User的集合,那么如何检查哪一个是Admin哪一个是Player。以及如何在那之后调用子类的方法?

1 个答案:

答案 0 :(得分:1)

你如何设法获得Users的集合?

Doctrine根据Player的值实例化AdminDiscriminatorColumn的具体类。您可以使用instanceof检查您获得的实体:

switch(true){
    $entity instanceof Player:
         // do player's stuff
         break;
    $entity instanceof Admin:
         // do admin's stuff
         break;
}