」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 組合與繼承

組合與繼承

發佈於2024-11-08
瀏覽:712

Composition vs. Inheritance

繼承與繼承PHP 中的組合 ?

當我們進行物件導向程式設計時,了解繼承和組合之間的差異很重要:

遺產
一個類別繼承另一個類,重複使用並擴展其行為。

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

class Carro extends Motor{}

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

作品
一個類別包含其他類別的實例來委派職責。通常首選組合來創建更靈活的系統並避免深層繼承的問題。

實際範例
您是否曾經停下來想一想,當我們啟動汽車時,我們實際上是在啟動引擎?按照這個推理,我們可以創建兩個物件:一個稱為 Engine,另一個稱為 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!

優點
這種方法更加靈活,因為它允許汽車具有不同的引擎類型(例如,V4、V6 或電動引擎),而無需更改 Car 類別。這種模組化有利於系統維護和擴展。

版本聲明 本文轉載於:https://dev.to/carloseduardoalvesviana/composition-vs-inheritance-98a?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3