首页 >后端开发 >php教程 >Composition vs. Inheritance

Composition vs. Inheritance

Linda Hamilton
Linda Hamilton原创
2024-09-20 22:15:101034浏览

Composition vs. Inheritance

Herança vs. Composição em PHP ?

Quando programamos orientados a objetos, é importante entender a diferença entre Herança e Composição:

Herança
Uma classe herda de outra, reutilizando e estendendo seu comportamento.

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro extends Motor{}

$carro = new Carro();
$carro->ligar();

Composição
Uma classe contém instâncias de outras classes para delegar responsabilidades. Muitas vezes, a composição é preferida para criar sistemas mais flexíveis e evitar problemas com herança profunda.

Exemplo Prático
Já parou para pensar que, quando ligamos o carro, estamos na verdade ligando o motor? Seguindo esse raciocínio, podemos criar dois objetos: um chamado Motor e outro chamado Carro. Dessa forma, o objeto Carro conterá uma instância do objeto Motor, que será responsável por ligar o carro.

Código

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro
{
    private Motor $motor;

    public function __construct(Motor $motor)
    {
        $this->motor = $motor;
    }

    public function ligar()
    {
        return $this->motor->ligar();
    }
}

Entendendo
Em vez de a classe Carro ter a lógica de ligar o motor embutida diretamente, ela delega essa responsabilidade a um objeto Motor. Isso mantém a classe Carro focada apenas no que ela deve fazer, tornando o código mais modular e fácil de manter. No futuro, você pode alterar ou melhorar o motor sem modificar o código da classe Carro.

Testando

$motorV4 = new Motor();
$carro = new Carro($motorV4);
echo $carro->ligar(); // Saída: Motor Ligado!

Vantagens
Essa abordagem é mais flexível porque permite que o carro tenha diferentes tipos de motor (por exemplo, um motor V4, V6 ou elétrico), sem precisar mudar a classe Carro. Essa modularidade facilita a manutenção e a expansão do sistema.

以上是Composition vs. Inheritance的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn