PHP 7で多型を使用する方法PHP 7の多型
インターフェイスを使用してください。 実裝を提供せずにメソッドシグネチャを指定します。 クラスからインターフェイスを?qū)g裝し、メソッドの獨(dú)自の具體的な実裝を提供します。
この例では、およびは
オブジェクトとして扱われます。// Define an interface interface Shape { public function getArea(); } // Implement the interface in different classes class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function getArea() { return pi() * $this->radius * $this->radius; } } class Square implements Shape { private $side; public function __construct($side) { $this->side = $side; } public function getArea() { return $this->side * $this->side; } } // Using polymorphism $shapes = [new Circle(5), new Square(4)]; foreach ($shapes as $shape) { echo "Area: " . $shape->getArea() . PHP_EOL; }ループは、両方のタイプを含む配列を介して繰り返し、それぞれに
を呼び出します。 正しい実裝は、実際のオブジェクトタイプに応じて実行されます。Circle
Square
Shape
抽象クラスを使用して:foreach
getArea()
ここでは、
および>継承を継承し、// Define an abstract class abstract class Animal { public function speak() { echo "Generic animal sound" . PHP_EOL; } abstract public function move(); } // Extend the abstract class class Dog extends Animal { public function move() { echo "Dog is running" . PHP_EOL; } } class Bird extends Animal { public function move() { echo "Bird is flying" . PHP_EOL; } } // Using polymorphism $animals = [new Dog(), new Bird()]; foreach ($animals as $animal) { $animal->speak(); $animal->move(); }メソッドの特定の実裝を提供する必要があります。
メソッドには抽象クラスにデフォルトの実裝がありますが、サブクラスは必要に応じてそれをオーバーライドできます。既存のコード。 新しいクラスがインターフェイスを順守するか、抽象クラスを拡張している限り、シームレスに統(tǒng)合できます。Dog
Bird
Animal
コードの再利用性:move()
多型は、複數(shù)のクラスで動(dòng)作するジェネリックコードを作成できるようにすることでコードの再利用を促進(jìn)します。 これにより、コードの複製が削減され、保守性が向上します。speak()
設(shè)計(jì)の改善:
多型は、よりモジュール式で十分に構(gòu)造化された設(shè)計(jì)につながります。 懸念の分離を促進(jìn)し、よりクリーンなアーキテクチャを促進(jìn)します。
- テスト可能性:
- 多型により、単體テストが容易になります。簡(jiǎn)単にモックまたはスタブインターフェイスまたは抽象クラスを作成して、テストプロセスを簡(jiǎn)素化できます。 保守性:1つのクラスへの変更は、アプリケーションの他の部分に影響を與える可能性が低くなります。 これにより、バグを?qū)毪工毳辚攻X減され、メンテナンスが容易になります。
- カップリングのゆるい:多型は、クラス間の依存関係を減らします。 特定のクラスと直接対話(huà)する代わりに、コードはインターフェイスまたは抽象クラスと対話(huà)します。 これは、1つのクラスの変更がシステムの殘りの部分を波及する可能性が低いことを意味します。 これは、固體設(shè)計(jì)の原理のオープン/クローズド原理に準(zhǔn)拠しています。
- 簡(jiǎn)単なリファクタリング:カップリングが緩んでいるため、リファクタリングは簡(jiǎn)素化されます。 インターフェイスまたは抽象クラスの契約が維持されている限り、システムの他の部分に影響を與えることなく実裝を変更または交換できます。
- デバッグの簡(jiǎn)素化:モジュール性のため、エラーの原因を特定しやすくなります。 変更の影響はローカライズされ、追跡が容易です。
- さまざまなシナリオでの使用を示すPHP 7の多型の例を提供できますか? 、 、
を作成できます。 次に、このインターフェイスを?qū)g裝するコンクリートクラス
およびを作成します。 アプリケーションコードは、実際のデータベースシステムに関係なく、インターフェイスを使用してデータベースと対話(huà)できます。 データベースの切り替えには、コンクリートクラスのインスタンス化を変更する必要があります。
シナリオ2:支払い処理:Database
connect()
query()
別の支払いゲートウェイ(Stripe、PayPal)がある場(chǎng)合があります。 disconnect()
などのメソッドを使用してMySQLDatabase
を作成します。 PostgreSQLDatabase
やDatabase
などの実裝は、各ゲートウェイの詳細(xì)を処理します。 ショッピングカートアプリケーションは、
シナリオ3:ロギング:
PaymentGateway
さまざまなロギングメカニズム(ファイル、データベース、電子メール)は、インターフェイスを使用して実裝できます。 processPayment()
、StripePaymentGateway
、PayPalPaymentGateway
などのコンクリートクラスは、特定のロギング方法を処理します。アプリケーションは、PaymentGateway
インターフェイスを使用して、コアコードを変更せずにロギング戦略を選択する柔軟性を提供します。
これらの例は、特定の実裝からアプリケーションロジックを分離することにより、多型が柔軟性、保守性、および拡張性をどのように促進(jìn)するかを示しています。 これにより、よりクリーンで、より堅(jiān)牢で、維持が容易なPHP 7アプリケーションになります。
以上がPHP 7で多型を使用する方法は?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover
寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類(lèi)リムーバー

Video Face Swap
完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版
中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)