PHP におけるポリモーフィズム

PHPz
リリース: 2024-08-29 13:05:50
オリジナル
443 人が閲覧しました

ポリモーフィズムは、PHP オブジェクト指向プログラミング言語機能 (OOPS 機能) の優れた概念の 1 つです。ポリモーフィズムという言葉は、実際にはギリシャ語の「Poly」と「Morph」という 2 つの単語に由来しています。ポリとは「多くの」、モーフとは「形」を意味します。それは、さまざまな形を持つ能力を意味します。一般的に言うと、ポリモーフィズムは、クラスが共通のインターフェイスを持ちながらさまざまな機能を備えたオブジェクト指向プログラミング パターンです。実際には、ポリモーフィズムにはコンパイル時と実行時の 2 つのタイプがあります。 PHP は、関数と演算子のオーバーロードを意味するコンパイル時のポリモーフィズムをサポートしていません。

広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文:

Class a{
//methods
Public function b(){
//methods
}
}
Class b extends a{
//methods
Public function b(){
//methods which are in/not in the function of the class a.
}
}
ログイン後にコピー

説明:

上記の構文では、2 つのクラスを作成しました。1 つは通常のクラス、もう 1 つはクラスを拡張するものですが、異なる機能には同じ関数名/メソッドを使用しました。これをポリモーフィングと呼びます。コーディングで必要に応じて、異なる機能を持つ関数/メソッドの類似した名前を多数使用できます。

PHP におけるポリモーフィズムの機能

PHP のポリモーフィズムは、実行時ポリモーフィズムの概念に基づいて機能します。 PHP では、ポリモーフィズムは実行時に決定を行うことによって機能しますが、これは実際にはコンパイル時のポリモーフィズムの概念ではありません。そうでない場合は、スーパークラスのサブタイプである多くの/複数の実装があると言えます。ランタイム (関数のオーバーロード) の概念は、 PHP プログラミング言語のポリモーフィズムの例。

関数のオーバーロードとは、メソッドのオーバーライドとして呼び出される関数として、親クラスに同じシグネチャを持つ新しく作成された関数 (関数が同じ名前、同じ型、および引数の数を持つことを意味します) からクラスを派生することを意味します。 。この多態性の概念では、拡張することで関数を作成できますが、多態性と継承の概念を処理するには、同じ名前/類似した命名関数を使用する必要があります。共通のインターフェイスを持つクラスの機能を増やしてプログラミング機能を強化するには、ポリモーフィズムが必須です。

PHP でポリモーフィズムを実装する例

以下は PHP におけるポリモーフィズムの例です:

例 #1

以下の例では、基本クラスの 1 つ「Shap1」が作成されます。ここでは、3 つの派生クラスの Shap1 クラスを継承します。クラス名は、Circle1、Triangle1、および Elliipse1 です。すべてのクラスには、PHP プログラミング言語のランタイム ポリモーフィズムを完成させるための関数draw があります。次の呼び出しプロセスでは、長さ 2 の配列を作成します。各配列のインデックスは、1 つのクラスのオブジェクトを作成するのに役立ちます。この後、オブジェクト配列変数「$Val1[$i1]」に渡される値「$i1」を持つ配列の長さに基づいて実行されるループを使用します。したがって、これは 3 回実行され、各クラスのdraw() メソッドを使用して呼び出されます。

コード:

<?php
class Shap1
{
function draw1(){}
}
class Circle1 extends Shap1
{
function draw1()
{
print "Circle1 has been drawn.\n";
}
}
class Triangle1 extends Shap1
{
function draw1()
{
print "Triangle1 has been drawn.\n";
}
}
class Ellipse1 extends Shap1
{
function draw1()
{
print "Ellipse1 has been drawn.";
}
}
$Val1=array(2);
$Val1[0]=new Circle1();
$Val1[1]=new Triangle1();
$Val1[2]=new Ellipse1();
for($i1=0;$i1<3;$i1++)
{
$Val1[$i1]->draw1();
}
?>
ログイン後にコピー

出力:

PHP におけるポリモーフィズム

例 #2

これは、インターフェイス ヘルプを使用したポリモーフィズムの概念の実装例です。インターフェイスは、コードが含まれていないことを除けば、他のクラスと非常によく似ています。このインターフェイスはメソッド名とメソッド引数の定義に役立ちますが、ここではメソッドの内容は定義されません。任意のクラスによって実行されているインターフェイスは、そのインターフェイスによって特徴付けられるすべてのメソッドによって実行される必要があります。

ここで、Machine1 には calcTask1 を定義するためのすべてのクラスが含まれます。 Circle1 は CallTask​​1() メソッドを実装します。 Rectangle1 も Machine インターフェイスを実装しようとしますが、異なる本体の calcTask1() メソッドを定義します。ポリモーフィズムでは、タスクを計算するすべてのメソッドが同等の名前を持つ必要があると規定しています。詳細は説明せずに、calcTask1() のさまざまな名前を呼び出します。ここで、タスクを計算するメソッドの名前が重要です。

コード:

<?php
interface Machine1 {
public function calcTask1();
}
class Circle1 implements Machine1 {
private $radius1;
public function __construct($radius1){
$this -> radius1 = $radius1;
}
public function calcTask1(){
return $this -> radius1 * $this -> radius1 * pi();
}
}
class Rectangle1 implements Machine1 {
private $width1;
private $height1;
public function __construct($width1, $height1){
$this -> width1 = $width1;
$this -> height1 = $height1;
}
public function calcTask1(){
return $this -> width1 * $this -> height1;
}
}
$mycirc1 = new Circle1(3);
$myrect1 = new Rectangle1(3,4);
echo $mycirc1->calcTask1();
echo $myrect1->calcTask1();
?>
ログイン後にコピー

出力:

PHP におけるポリモーフィズム

Example #3

In the below example a class “base11” is created with a function add1() with $a1 and $b1 variables. Then “$res1” variable is created which is used to store the multiplication of the two variables “$a1” and “$b1” and the echo statement is used to print if the function is called. Then Child1 class is used to extend the base11 class. In the extended class, again add1() variable is created to store the sum or the a1 and b1 variables. Then a new object is created and called by passing the variable values to the values $a1 and $b1 variables.

Code:

<?php
class base11
{
function add1($a1,$b1)
{
$res1=$a1*$b1;
echo "Multiplication = ".$res1;
}
}
class child1 extends base11
{
function add1($a1,$b1)
{
$res1=$a1+$b1;
echo "Sum  = ".$res1;
}
}
$obj= new child1();
$obj->add1(1000,500);
?>
ログイン後にコピー

Output:

PHP におけるポリモーフィズム

Example #4

In the below example a class “BaseClass11” is created with the public function “myMethod()” is created with the echo statement to mention that “BaseClass11 method” is called that. Then again DerivedClass11 is created to extend the BaseClass11 with the same name function “myMethod()” with the echo statement to print “DerivedClass11 method called” like that. We are calling the same/similar naming function in different classes. Then new object is created for the function/ method “myMethod()”.

Code:

<?php
class BaseClass11
{
public function myMethod11()
{
echo "BaseClass11 method called";
}
}
class DerivedClass11 extends BaseClass11
{
public function myMethod11()
{
echo "DerivedClass11 method called";
}
}
function processClass11(BaseClass11 $c11)
{
$c11->myMethod11();
}
$c11 = new DerivedClass11();
processClass11($c11);
?>
ログイン後にコピー

Output:

PHP におけるポリモーフィズム

Recommended Article

This is a guide to the Polymorphism in PHP. Here we discuss the what is the definition of Polymorphism and its Working along with its examples as well as Code Implementation. You can also go through our other suggested articles to learn more-

  1. PHP Frameworks
  2. basename in PHP
  3. Validation in PHP
  4. print_r() in PHP

以上がPHP におけるポリモーフィズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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