Herança Laravel: qual seria o modo correto de fazer?

No Laravel quando se cria um Controller já vem com extends Controller e gostaria de saber, se caso for necessário criar uma classe ClienteVip que extends Cliente, qual seria o modo correto de fazer no Laravel.

1 curtida

Vale lembrar que Laravel é um framework construído em PHP, então a premissa é que utilize a nomenclatura do PHP para implementar código Orientado a Objeto e também utilizando padrões de projeto.

A sua pergunta falta o contexto: Porque na impede essa herança class ClientVip extends Cliente, mas, em qual momento vai fazer isso, porque vai fazer isso, qual a finalidade real porque nem sempre herança é a melhor solução?

Falta realmente o contexto, local que vai usar … e porque vai usar? Se for responder genericamente sim pode fazer se for necessário, o modo correto não posso responder não tem contexto.

A duvida é que quando o controller é gerado ele já tem um extends, seria possível adicionar outro?

Por Exemplo:

class ClienteVip extends Controller, Cliente 
{ 

}

Aqui tem um contexto: A duvida é que quando o controller é gerado ele já tem um extends, seria possível adicionar outro?

Não, porque PHP só deixa um herança por classe, existe o mecanismo de traits mais ai é o outro assunto.

Se precisar um herança antes do controller faça assim:

Observação: nomenclatura Laravel por favor.

ClienteController

class ClienteController extends Controller
{

}

ClienteVipController

class ClienteVipController extends ClienteController
{ 

}

Um exemplo próprio, eu crie um BaseAdminController, para que eu adicionasse alguns itens que seriam compartilhados em todo o projeto, exemplo:

class AdminBaseController extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    private $data = [];
    public function __construct()
    {
        $this->setItem('routeName', Route::getCurrentRoute()->getName());
    }
}

e depois utilize nos controllers:

class IndexController extends AdminBaseController
{
    public function __construct()
    {
        parent::__construct();
        $this->setItem('title', 'Store');
        $this->setItem('barTitle', 'Gerenciador');
    }
}

assim seria um exemplo razoável e que não quebra o paradigma, mas, sim utiliza da melhor forma possivel

Eu ouvir falar que não é muito aconselhável utilizar herança em Laravel.

  • Você ouviu falar que fazer POO em PHP não é muito aconselhável?
  • Você ouviu falar mas, quais os motivos de não ser?

Veja qualquer linguagem com esse paradigma tem que tomar cuidado com Herança, mas, fazer herança consciente e saber o que está fazendo é sim útil.

O que eu sempre digo aqui no site, qual é o contexto, onde vai utilizar?

O exemplo passado ao amigo, não fere e é muito aconselhável quando você precisa de um padrão de controller que foi o que aconteceu comigo, foi utilizado no projeto sem repetição de código e o meu controller sabia quais eram até as suas rotas e sua views, que seria informações que se repetem em todas os cadastros (CRUD) do projeto.

Há com certeza exageros, mas, não podemos descartar o uso de herança.

1 curtida