当方法签名必须更改时,如何重载 PHP 中的子 class 方法,尊重 OOP 和 SOLID 原则?

How to overload child class methods in PHP, respecting OOP and SOLID principles, when method signature must change?

当方法签名必须更改时,如何根据 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;
}

?>

在这里我不会担心更改方法签名,因为只要 ClientDTOPeopleDTO 的子 class,签名在您的特定情况下是兼容的。您可以将 ClientDTO 实例传递给 People::fillData,它仍然可以工作。所以我想说,从这个角度来看不用担心。 但是您应该在签名中使用接口来代替硬编码的 class 依赖项。如果需要,您可以将其称为策略模式。这样,您将尊重 Open\Closed 和依赖倒置原则,因为您的 classes 将依赖于抽象。或者至少你应该使用一些基础抽象 class 如果你认为创建接口是一种矫枉过正,或者你的实体是非常特定于领域的。

P.S。我假设您在代码示例中犯了一个错误:class ClientDTO 应该是 class PeopleDTO