インターフェイスを実装し、メソッドの独自の具体的な実装を提供します。
この例では、およびは
オブジェクトとして扱われます。<code class="php">// 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; }</code>ループは、両方のタイプを含む配列を介して繰り返し、それぞれに
を呼び出します。 正しい実装は、実際のオブジェクトタイプに応じて実行されます。Circle
Square
Shape
抽象クラスを使用して:foreach
getArea()
ここでは、
および>継承を継承し、<code class="php">// 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(); }</code>メソッドの特定の実装を提供する必要があります。
メソッドには抽象クラスにデフォルトの実装がありますが、サブクラスは必要に応じてそれをオーバーライドできます。既存のコード。 新しいクラスがインターフェイスを順守するか、抽象クラスを拡張している限り、シームレスに統合できます。Dog
Bird
Animal
コードの再利用性:move()
多型は、複数のクラスで動作するジェネリックコードを作成できるようにすることでコードの再利用を促進します。 これにより、コードの複製が削減され、保守性が向上します。speak()
を作成します。 アプリケーションコードは、実際のデータベースシステムに関係なく、インターフェイスを使用してデータベースと対話できます。 データベースの切り替えには、コンクリートクラスのインスタンス化を変更する必要があります。
シナリオ2:支払い処理:Database
connect()
query()
別の支払いゲートウェイ(Stripe、PayPal)がある場合があります。 disconnect()
などのメソッドを使用してMySQLDatabase
を作成します。 PostgreSQLDatabase
やDatabase
などの実装は、各ゲートウェイの詳細を処理します。 ショッピングカートアプリケーションは、
シナリオ3:ロギング:
PaymentGateway
さまざまなロギングメカニズム(ファイル、データベース、電子メール)は、インターフェイスを使用して実装できます。 processPayment()
、StripePaymentGateway
、PayPalPaymentGateway
などのコンクリートクラスは、特定のロギング方法を処理します。アプリケーションは、PaymentGateway
インターフェイスを使用して、コアコードを変更せずにロギング戦略を選択する柔軟性を提供します。
これらの例は、特定の実装からアプリケーションロジックを分離することにより、多型が柔軟性、保守性、および拡張性をどのように促進するかを示しています。 これにより、よりクリーンで、より堅牢で、維持が容易なPHP 7アプリケーションになります。
以上がPHP 7で多型を使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。