当方法签名必须更改时,如何在PHP中重载关于OOP和SOLID原则的PHP子类方法。有一些针对此的设计模式吗?
<?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;
}
?>
答案 0 :(得分:1)
我不担心更改方法签名,因为只要ClientDTO
是PeopleDTO
的子类,签名在您的特定情况下是兼容的。您可以将ClientDTO
实例传递给People::fillData
,它仍然可以使用。所以我想说,从这个角度来看,不用担心。
但是您应该在签名中使用接口代替硬编码的类依赖项。如果您愿意,可以将其称为策略模式。这样,您将尊重Open \ Closed和Dependency Inversion原则,因为您的类将依赖于抽象。或者至少你应该使用一些基础抽象类,如果你认为创建接口是一种过度杀伤,或者你的实体是非常特定于域的。
P.S。我假设您在代码示例中犯了一个错误:class ClientDTO
应为class PeopleDTO