Comment surcharger les méthodes de classe enfant en PHP en respectant les principes OOP et SOLID, quand la signature de la méthode doit changer. Il y a un motif de conception destiné à cela?Comment surcharger les méthodes de classe enfant en PHP, en respectant les principes OOP et SOLID, quand la signature de la méthode doit changer?
<?php
class Client extends People
{
protected function fillData(ClientDTO $clientDTO)
{
parent::fillData($clientDTO);
...
}
}
class People
{
protected function fillData(PeopleDTO $peopleDTO)
{
...
}
}
class ClientDTO extends PeopleDTO
{
protected $orders;
}
class PeopleDTO
{
protected $name;
}
?>
Si la signature de méthode change, alors l'enfant ne surcharge pas la méthode parent; c'est créer une nouvelle méthode. – sorayadragon
réponse courte: vous ne pouvez pas, parce que ce que vous voulez est une classe différente et pas un sous-type spécialisé –
Un modèle ici pourrait être le [motif d'usine abstrait] (https://en.wikipedia.org/wiki/Abstract_factory_pattern), mais c'est peut-être (probablement) exagéré pour ce que vous aimeriez accomplir. C'est un modèle plus grand et plus difficile à saisir. Il vous permet de gérer différentes familles de classes qui partagent la même interface (d'où le résumé). Juste commentant que vous avez demandé un modèle. – hakre