PHP OOP 部分多態性

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 07:28:38312ブラウズ

PHP OOP Part-Polymorphism

このシリーズでは、PHP オブジェクト指向プログラミング (OOP) の基礎について説明します。コンテンツは連続したパートに編成され、それぞれが特定のトピックに焦点を当てます。初心者または OOP の概念に慣れていない場合、このシリーズは段階的にガイドできるように設計されています。 このパートでは、PHP のポリモーフィズムについて説明します。一緒に PHP OOP を学ぶ旅を始めましょう!

今度はポリモーフィズムについて学びます。ポリモーフィズムとはどういう意味ですか? 「ポリモーフィズム」という用語には 2 つの部分があります。 1つは多くを意味する「Poly」、もう1つは形を意味する「Morphism」です。つまり、ポリモーフィズムとは、多くの形式またはさまざまな形式を意味します。プログラミングの文脈でポリモーフィズムという用語が使用される場合、2 つの概念を使用してそれを実現できます。

最初の概念はメソッドのオーバーロードで、コンパイル時ポリモーフィズムとも呼ばれます。

メソッドのオーバーロードは次のように機能します。クラスに 1 つのパラメーターを取るメソッドがあるとします。まったく同じ名前で複数のパラメータを持つ別のメソッドを宣言した場合、それは有効です。つまり、クラス内で同じ名前の 2 つのメソッドを宣言できますが、パラメーターの数は異なっていなければなりません。後でこのクラスのインスタンスを作成してこれらのメソッドを使用するとき、どのメソッドを呼び出すかは、メソッドに渡されるパラメーターの数によって決まります。その結果、同じメソッドでもパラメータに基づいて異なる動作や動作が行われます。次に、サンプルコードを見てみましょう。

コード例

class Vehicle
{
   public function getTotal($first, $second)
   {
      echo $first . " " . $second . "\n";
   }

   public function getTotal($first, $second, $third)
   {
      echo $first . " " . $second . " " . $third . "\n";
   }
}

$vehicle = new Vehicle();
$vehicle->getTotal(10, 20);
$vehicle->getTotal(10, 20, 30);

ここでは、getTotal という名前の 2 つのメソッドが Vehicle クラスで宣言されていることがわかります。これら 2 つのメソッドは異なるパラメーターを受け取ります。ここで、Vehicle クラスのインスタンスを作成し、これらのメソッドを使用するとき、その動作は指定されたパラメーターによって異なります。たとえば、Vehicle クラスのインスタンスを作成した後、最初に 2 つのパラメーターを指定して getTotal メソッドが呼び出され、その結果、クラスの最初の getTotal メソッドが呼び出されます。次に、3 つのパラメーターを指定して getTotal メソッドが再度呼び出され、クラスの 2 番目の getTotal メソッドが呼び出されます。したがって、同じメソッドがどのように動作が異なるかを理解できます。

ただし、PHP はメソッドのオーバーロードやコンパイル時のポリモーフィズムをサポートしていないため、このコードを実行しても機能しません。ただし、メソッドのオーバーライドや実行時のポリモーフィズムはサポートされています。この例は、概念を理論的に理解するためにのみ使用しました。

2 番目の概念はメソッド オーバーライドであり、ランタイム ポリモーフィズムとも呼ばれます。

メソッドのオーバーライドは次のように機能します。クラス内に、パラメータを取得する場合も取得しない場合もあり、特定のタスクを実行するメソッドがあるとします。このクラスが別のクラスによって継承され、まったく同じ名前のメソッドが子クラスで宣言されている場合、このプロセスはメソッドのオーバーライドまたは実行時ポリモーフィズムと呼ばれます。つまり、子クラスで同じ名前のメソッドを宣言でき、パラメータの数は同じでも異なっていてもかまいません。別のタスクを実行します。後で子クラスのインスタンスを作成してメソッドを使用するとき、メソッドを親クラスから呼び出すか子クラスから呼び出すかは、渡されたパラメーターによって決まります。その結果、同じメソッドでもパラメータに基づいて異なる動作やアクションが表示されます。次に、サンプルコードを見てみましょう。

コード例

class Vehicle
{
   public function getTotal($first, $second)
   {
      echo $first . " " . $second . "\n";
   }

   public function getTotal($first, $second, $third)
   {
      echo $first . " " . $second . " " . $third . "\n";
   }
}

$vehicle = new Vehicle();
$vehicle->getTotal(10, 20);
$vehicle->getTotal(10, 20, 30);

子クラスのインスタンスから 2 つのパラメーターを指定して getTotal メソッドが呼び出されると、2 つのパラメーターを指定したメソッドが子クラスに存在するかどうかが実行時にチェックされます。そうでない場合、子クラスは親クラスからメソッドを継承して呼び出します。

その後、3 つのパラメーターを指定して getTotal メソッドが再度呼び出されるとき、3 つのパラメーターを指定したメソッドが子クラスに存在するかどうかがもう一度チェックされます。子クラスでメソッドが 3 つのパラメーターでオーバーライドされたことを検出すると、子クラスから getTotal メソッドを呼び出します。

親クラスと子クラスの両方に同じパラメーターを持つメソッドがある場合、この場合も子クラスでオーバーライドされたメソッドが呼び出されます。

これは基本的にメソッドのオーバーライドがどのように機能するかです。これで、メソッドをオーバーライドする方法とその動作が理解できました。

このディスカッションによって、このレッスンで取り上げられるトピックについて予備的な理解が得られたことを願っています。今日はここまでです。次のレッスンでお会いしましょう。

GitHub や Linkedin で私とつながることができます。

以上がPHP OOP 部分多態性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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