Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como seria essa explicação com Banco de Dados

No exemplo da aula usamos classes filhas para diferenciar os tipos de funcionários, em uma aplicação que salva os funcionários num BD cada tipo de funcionário teria que ser salvo em uma tabela diferente? Se não, como saberíamos qual "Tipo de Funcionário" chamar no código de forma dinâmica?

1 resposta
solução!

Fala Biel, beleza?

Você salvaria os funcionários em uma única tabela, de maneira normal, você poderia modelar o banco contendo uma tabela para os funcionários e outra para os cargos(que representa os tipos de funcionários). A sua camada de persistência analisaria o tipo de instância de objeto que você quer salvar, relacionaria com o cargo correspondente e realizaria a persistência.

Vou tentar exemplificar de maneira bem resumida, pode conter inconsistências, é apenas para dar uma noção:

//camada da aplicação
$repositorio->adiciona(new Gerente('Fulano', 'Gerente'));

//camada de persistencia dentro da classe de repositório

public function adiciona(Funcionario $funcionario): void
{
    $sql = "INSERT INTO funcionarios (nome, cargo) VALUES (:nome, :cargo)";

    // aqui realizaria a estrategia para descobrir qual tipo de cargo
    // tem estratégias melhores, apenas para dar um exemplo

    switch($funcionario->cargo()){
    case 'Desenvolvedor':
        $cargo = 1;
        break;
    case 'Gerente':
        $cargo = 2;
        break;
    default:
        $cargo = 0;     
        }

    $this->pdo->prepare($sql);
    $this->pdo->bindValue(':nome', $funcionario->nome());
    $this->pdo->bindValue(':cargo', $cargo);

    //restante do código
}

Era essa sua dúvida? Eu modelaria as classes de maneira diferente, acho redundante passar o tipo de cargo sendo que a classe já representa o cargo, mas provavelmente foi feito dessa maneira para simplificar o entendimento. Não fiz esse treinamento então posso ter entendido errado a dúvida, qualquer coisa estou a disposição.