ホームページ  >  記事  >  バックエンド開発  >  構成と継承

構成と継承

Linda Hamilton
Linda Hamiltonオリジナル
2024-09-20 22:15:10839ブラウズ

Composition vs. Inheritance

継承 vs. PHP での構成 ?

オブジェクト指向をプログラミングする場合、継承と合成の違いを理解することが重要です。

継承
あるクラスは別のクラスを継承し、その動作を再利用および拡張します。

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

class Carro extends Motor{}

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

構成
クラスには、責任を委任するための他のクラスのインスタンスが含まれています。より柔軟なシステムを作成し、深い継承による問題を回避するには、多くの場合、合成が好まれます。

実践例
車を始動するとき、私たちは実際にエンジンを始動しているのだと立ち止まって考えたことはありますか?この推論に従って、2 つのオブジェクトを作成できます。1 つは Engine と呼ばれ、もう 1 つは Car と呼ばれます。このようにして、Car オブジェクトには、車の始動を担当する Engine オブジェクトのインスタンスが含まれることになります。

コード

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();
    }
}

理解
Car クラスにエンジンを開始するためのロジックが直接組み込まれているのではなく、この責任を Engine オブジェクトに委任します。これにより、Car クラスは本来の動作だけに集中し、コードがよりモジュール化され、保守が容易になります。将来的には、Car クラス コードを変更せずにエンジンを変更または改善できるようになります。

テスト

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

メリット
このアプローチは、Car クラスを変更することなく、車にさまざまなエンジン タイプ (V4、V6、電気エンジンなど) を搭載できるため、より柔軟です。このモジュール性により、システムのメンテナンスと拡張が容易になります。

以上が構成と継承の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。