Как привести экземпляр суперкласса к экземпляру подкласса? (Учение)

1

Я хотел бы использовать 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 s, как можно проверить, какой из них - Admin а какой - Player. И как вызвать метод подкласса после этого?

Теги:
inheritance
doctrine2

1 ответ

1
Лучший ответ

Как вам удается получить коллекцию Users?

Doctrine создает конкретные классы Player и Admin зависимости от значения DiscriminatorColumn. Вы можете проверить, какой объект вы получаете с instanceof:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню