継承 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、電気エンジンなど) を搭載できるため、より柔軟になります。このモジュール性により、システムのメンテナンスと拡張が容易になります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3