ホームページ > バックエンド開発 > PHP7 > PHP 7で多型を使用する方法は?

PHP 7で多型を使用する方法は?

Johnathan Smith
リリース: 2025-03-10 16:39:17
オリジナル
468 人が閲覧しました

PHP 7で多型を使用する方法PHP 7の多型

インターフェイスを使用してください。 実装を提供せずにメソッドシグネチャを指定します。 クラスから

インターフェイスを実装し、メソッドの独自の具体的な実装を提供します。

この例では、および

オブジェクトとして扱われます。
// 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 SquareShape抽象クラスを使用して:foreachgetArea()

抽象クラスはインターフェイスに似ていますが、一部の方法でデフォルトの実装を提供できます。 直接インスタンス化することはできません。サブクラスはそれらを拡張し、抽象的なメソッドの実装を提供する必要があります。

ここでは、

および

>継承を継承し、
// 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();
}
ログイン後にコピー
メソッドの特定の実装を提供する必要があります。

メソッドには抽象クラスにデフォルトの実装がありますが、サブクラスは必要に応じてそれをオーバーライドできます。既存のコード。 新しいクラスがインターフェイスを順守するか、抽象クラスを拡張している限り、シームレスに統合できます。DogBirdAnimalコードの再利用性:move()多型は、複数のクラスで動作するジェネリックコードを作成できるようにすることでコードの再利用を促進します。 これにより、コードの複製が削減され、保守性が向上します。speak()

設計の改善:

多型は、よりモジュール式で十分に構造化された設計につながります。 懸念の分離を促進し、よりクリーンなアーキテクチャを促進します。

    テスト可能性:
  • 多型により、単体テストが容易になります。簡単にモックまたはスタブインターフェイスまたは抽象クラスを作成して、テストプロセスを簡素化できます。
  • 保守性:1つのクラスへの変更は、アプリケーションの他の部分に影響を与える可能性が低くなります。 これにより、バグを導入するリスクが軽減され、メンテナンスが容易になります。
    • カップリングのゆるい:多型は、クラス間の依存関係を減らします。 特定のクラスと直接対話する代わりに、コードはインターフェイスまたは抽象クラスと対話します。 これは、1つのクラスの変更がシステムの残りの部分を波及する可能性が低いことを意味します。 これは、固体設計の原理のオープン/クローズド原理に準拠しています。
    • 簡単なリファクタリング:カップリングが緩んでいるため、リファクタリングは簡素化されます。 インターフェイスまたは抽象クラスの契約が維持されている限り、システムの他の部分に影響を与えることなく実装を変更または交換できます。
    • デバッグの簡素化:モジュール性のため、エラーの原因を特定しやすくなります。 変更の影響はローカライズされ、追跡が容易です。
    • さまざまなシナリオでの使用を示すPHP 7の多型の例を提供できますか?
    などのメソッドを使用したインターフェイス

    を作成できます。 次に、このインターフェイスを実装するコンクリートクラス

    および

    を作成します。 アプリケーションコードは、実際のデータベースシステムに関係なく、インターフェイスを使用してデータベースと対話できます。 データベースの切り替えには、コンクリートクラスのインスタンス化を変更する必要があります。

    シナリオ2:支払い処理:Databaseconnect()query()別の支払いゲートウェイ(Stripe、PayPal)がある場合があります。 disconnect()などのメソッドを使用してMySQLDatabaseを作成します。 PostgreSQLDatabaseDatabaseなどの実装は、各ゲートウェイの詳細を処理します。 ショッピングカートアプリケーションは、

    インターフェイスを使用して、コア機能を変更せずに新しい支払いオプションを簡単に追加できます。

    シナリオ3:ロギング:

    PaymentGatewayさまざまなロギングメカニズム(ファイル、データベース、電子メール)は、インターフェイスを使用して実装できます。 processPayment()StripePaymentGatewayPayPalPaymentGatewayなどのコンクリートクラスは、特定のロギング方法を処理します。アプリケーションは、PaymentGatewayインターフェイスを使用して、コアコードを変更せずにロギング戦略を選択する柔軟性を提供します。

    これらの例は、特定の実装からアプリケーションロジックを分離することにより、多型が柔軟性、保守性、および拡張性をどのように促進するかを示しています。 これにより、よりクリーンで、より堅牢で、維持が容易なPHP 7アプリケーションになります。

以上がPHP 7で多型を使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート