ホームページ バックエンド開発 PHPチュートリアル PHP で継承、ポリモーフィズム、インターフェイスを使用する方法

PHP で継承、ポリモーフィズム、インターフェイスを使用する方法

Jun 23, 2023 am 11:49 AM
インターフェース 継承する ポリモーフィズム

PHP は、サーバーサイド プログラミング用のオープンソース スクリプト言語であり、世界で最も人気があり、広く使用されているプログラミング言語の 1 つとなっています。 PHP では、継承、ポリモーフィズム、インターフェイスが 3 つの重要なオブジェクト指向プログラミング概念であり、これにより開発者はコードの再利用、柔軟性、保守性において大きな利点を得ることができます。この記事では、これら 3 つの概念を詳しく説明し、PHP での使用方法を紹介します。

  1. 継承

継承は、オブジェクト指向プログラミングにおける最も基本的な概念の 1 つです。これは、クラスが別のクラスのプロパティとメソッドを継承し、これに基づいてカスタム プロパティとメソッドを追加できることを意味します。サブクラス化は、親クラス (スーパークラスまたは基本クラスとも呼ばれます) を拡張することによって実現され、サブクラスが親クラスのコードと機能を再利用できるようになります。

PHP では、継承はキーワード「extends」を使用して行われます。たとえば、次のコードは単純な継承の実装です。

class Person {
  // 定义一个方法
  public function sayHello() {
    echo "Hello, world!";
  }
}

class Student extends Person {
  // 定义一个新的方法
  public function sayGoodbye() {
    echo "Goodbye, world!";
  }
}

// 使用子类的对象
$student = new Student();
$student->sayHello();  // 输出 “Hello, world!”
$student->sayGoodbye();  // 输出 “Goodbye, world!”
ログイン後にコピー

この例では、Person という名前のクラスを定義し、その中に SayHello() という名前のメソッドを定義します。次に、Student というサブクラスを作成し、「extends」キーワードを使用してそれを person クラスに拡張しました。サブクラスに、sayGoodbye() という新しいメソッドを追加しました。最後に、$student という名前の Student クラスのインスタンスを作成し、そのメソッドを呼び出します。

サブクラスが親クラスを継承すると、そのプロパティとメソッドを継承できるだけでなく、非プライベートのプロパティやメソッドにもアクセスできることに注意してください。実際、プライベート プロパティとメソッドの場合、親クラスから継承した後でもサブクラスはそれらにアクセスできません。

  1. ポリモーフィズム

ポリモーフィズムは、オブジェクト指向プログラミングのもう 1 つの重要な概念であり、同じメソッドが異なる状況下では異なる動作をする可能性があるという事実を指します。ポリモーフィズムを備えたメソッドは、実行時に呼び出す必要がある実際のメソッドを自動的に決定できるため、プログラムの柔軟性とスケーラビリティが大幅に向上します。

PHP でポリモーフィズムを実現する方法は、キーワード「抽象」と「インターフェース」を使用することです。抽象クラスまたはインターフェイスを定義し、抽象クラスを継承するかインターフェイスを実装することにより、ポリモーフィズムを実現できます。

2.1 抽象クラス

抽象クラスはインスタンス化できず、他のクラスのスーパークラスとしてのみ継承できるクラスです。抽象クラスは、そのサブクラスで実装する必要があるいくつかの抽象メソッドを定義できます。このようにして、抽象クラスを通じてポリモーフィズムを実現できます。

次は、抽象クラスを使用してポリモーフィズムを実現する例です:

abstract class Shape {
  // 定义一个抽象方法
  abstract public function getArea();
}

class Circle extends Shape {
  private $radius;

  public function __construct($radius) {
    $this->radius = $radius;
  }

  // 实现抽象方法
  public function getArea() {
    return pi() * pow($this->radius, 2);
  }
}

class Square extends Shape {
  private $side;

  public function __construct($side) {
    $this->side = $side;
  }
  
  // 实现抽象方法
  public function getArea() {
    return pow($this->side, 2);
  }
}

// 创建一个圆
$circle = new Circle(2);
// 创建一个正方形
$square = new Square(2);

// 输出面积
echo $circle->getArea();  // 输出 "12.566370614359"
echo $square->getArea();  // 输出 "4"
ログイン後にコピー

この例では、抽象クラス Shape を定義し、getArea() メソッドという名前の抽象化を宣言します。次に、Circle と Square の 2 つのサブクラスを作成し、それぞれ getArea() メソッドを実装しました。最後に、円と正方形のインスタンスを作成し、それらの getArea() メソッドを呼び出します。

2.2 インターフェイス

インターフェイスは、メソッド シグネチャのセットを定義する抽象型です (ただし、これらのメソッドは実装しません)。クラスは、このインターフェイスを実装して、このインターフェイスによって定義された動作を表現できます。 。 コミットメント。このようにして、インターフェースを通じてもポリモーフィズムを実現できます。 PHP では、キーワード「interface」を使用してインターフェースを定義し、キーワード「implements」を使用してインターフェースを実装できます。

次は、インターフェイスを使用してポリモーフィズムを実現する例です:

interface Animal {
  public function makeSound();
}

class Dog implements Animal {
  public function makeSound() {
    echo "Woof!";
  }
}

class Cat implements Animal {
  public function makeSound() {
    echo "Meow!";
  }
}

// 创建一个狗
$dog = new Dog();
// 创建一只猫
$cat = new Cat();

// 输出声音
$dog->makeSound();  // 输出 "Woof!"
$cat->makeSound();  // 输出 "Meow!"
ログイン後にコピー

この例では、Animal インターフェイスを定義し、makeSound() という名前のメソッドを宣言します。次に、Animal インターフェイスを実装する 2 つのサブクラス Dog と Cat を作成し、それぞれ makeSound() メソッドを実装しました。最後に、犬と猫のインスタンスを作成し、それらの makeSound() メソッドを呼び出します。

インターフェイスでは抽象メソッドのみを定義でき、これらのメソッドはインターフェイスを実装するクラスによって実装される必要があることに注意してください。

  1. 概要

継承、ポリモーフィズム、インターフェイスは 3 つの重要なオブジェクト指向プログラミング概念であり、PHP でも広く使用されています。継承を使用すると、あるクラスに別のクラスからプロパティとメソッドを継承させ、その上にカスタム プロパティとメソッドを追加できます。ポリモーフィズムを使用すると、異なる状況で同じメソッド名を通じて異なる動作を持つメソッドを呼び出すことができます。インターフェイスを使用すると、一連のメソッド シグネチャを定義し、インターフェイスを実装するクラスによってこれらのメソッドを実装できます。

PHP オブジェクト指向プログラムを作成する場合、継承、ポリモーフィズム、インターフェイスの 3 つの概念を合理的に使用すると、プログラムがより柔軟でスケーラブルになり、保守が容易になります。

以上がPHP で継承、ポリモーフィズム、インターフェイスを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには? C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには? May 01, 2024 pm 10:27 PM

関数の継承では、「基底クラス ポインター」と「派生クラス ポインター」を使用して継承メカニズムを理解します。基底クラス ポインターが派生クラス オブジェクトを指す場合、上方変換が実行され、基底クラスのメンバーのみにアクセスされます。派生クラス ポインターが基本クラス オブジェクトを指す場合、下向きキャストが実行される (安全ではない) ため、注意して使用する必要があります。

コンピュータのマザーボードの内部インターフェイスとは何ですか? コンピュータのマザーボードの内部インターフェイスに関する推奨される入門 コンピュータのマザーボードの内部インターフェイスとは何ですか? コンピュータのマザーボードの内部インターフェイスに関する推奨される入門 Mar 12, 2024 pm 04:34 PM

パソコンを組み立てる際、設置作業は簡単ですが、誤ってCPUラジエーターの電源線をSYS_FANに差し込んでしまうなど、配線に問題が発生することが多く、ファンは回転しますが、ファンが回転しない場合があります。コンピュータの電源がオンになると、F1 エラー「CPUFanError」が発生し、CPU クーラーがインテリジェントに速度を調整できなくなります。コンピューターのマザーボード上の CPU_FAN、SYS_FAN、CHA_FAN、および CPU_OPT インターフェイスに関する一般的な知識を共有しましょう。コンピュータのマザーボード上の CPU_FAN、SYS_FAN、CHA_FAN、および CPU_OPT インターフェイスに関する一般科学 1. CPU_FANCPU_FAN は、CPU ラジエーター専用のインターフェイスであり、12V で動作します。

Go 言語の一般的なプログラミング パラダイムと設計パターン Go 言語の一般的なプログラミング パラダイムと設計パターン Mar 04, 2024 pm 06:06 PM

最新の効率的なプログラミング言語である Go 言語には、開発者が高品質で保守可能なコードを作成するのに役立つ豊富なプログラミング パラダイムと設計パターンがあります。この記事では、Go 言語の一般的なプログラミング パラダイムと設計パターンを紹介し、具体的なコード例を示します。 1. オブジェクト指向プログラミング Go 言語では、構造体とメソッドを使用してオブジェクト指向プログラミングを実装できます。構造を定義し、その構造にメソッドをバインドすることにより、データのカプセル化と動作バインディングのオブジェクト指向機能を実現できます。パッケージマイニ

C++ 仮想関数テーブルとポリモーフィック実装、メモリの無駄を避ける方法 C++ 仮想関数テーブルとポリモーフィック実装、メモリの無駄を避ける方法 May 31, 2024 pm 07:03 PM

仮想基本クラスは、追加の vtable を作成せずに複数の基本クラスからの継承を許可することで、vtable のメモリ オーバーヘッドを最適化します。最適化されたコードでは、形状基本クラスに仮想関数テーブルがなくなり、円クラスと長方形クラスが同じ仮想関数テーブルを共有するため、メモリ消費量が削減されます。

C++ 関数の継承の詳細な説明: 継承のエラーをデバッグするには? C++ 関数の継承の詳細な説明: 継承のエラーをデバッグするには? May 02, 2024 am 09:54 AM

継承エラーのデバッグのヒント: 正しい継承関係を確認します。デバッガーを使用してコードをステップ実行し、変数値を調べます。仮想修飾子を正しく使用してください。隠れた相続によって引き起こされる相続ダイアモンド問題を調べてください。抽象クラスに実装されていない純粋仮想関数がないか確認します。

PHP インターフェースの概要とその定義方法 PHP インターフェースの概要とその定義方法 Mar 23, 2024 am 09:00 AM

PHP インターフェースの概要とその定義方法 PHP は、Web 開発で広く使用されているオープンソースのスクリプト言語であり、柔軟性があり、シンプルで強力です。 PHP では、インターフェイスは複数のクラス間で共通のメソッドを定義し、ポリモーフィズムを実現し、コードをより柔軟で再利用可能にするツールです。この記事では、PHP インターフェイスの概念とその定義方法を紹介し、その使用法を示す具体的なコード例を示します。 1. PHP インターフェイスの概念 インターフェイスはオブジェクト指向プログラミングにおいて重要な役割を果たし、クラス アプリケーションを定義します。

Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 May 01, 2024 pm 06:33 PM

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

C++ 関数の継承の詳細な説明: 継承における 'is-a' と 'has-a' の関係を理解するには? C++ 関数の継承の詳細な説明: 継承における 'is-a' と 'has-a' の関係を理解するには? May 02, 2024 am 08:18 AM

C++の関数継承を詳しく解説:「is-a」と「has-a」の関係をマスターしよう 関数継承とは?関数の継承は、派生クラスで定義されたメソッドを基本クラスで定義されたメソッドに関連付ける C++ の手法です。これにより、派生クラスが基本クラスのメソッドにアクセスしてオーバーライドできるようになり、基本クラスの機能が拡張されます。 「is-a」および「has-a」関係 関数継承では、「is-a」関係は、派生クラスが基本クラスのサブタイプであること、つまり、派生クラスが基本クラスの特性と動作を「継承」することを意味します。基本クラス。 「has-a」関係は、派生クラスに基本クラス オブジェクトへの参照またはポインターが含まれていること、つまり、派生クラスが基本クラス オブジェクトを「所有」していることを意味します。構文関数継承を実装する方法の構文は次のとおりです: classDerivedClass:pu

See all articles