ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるポリモーフィズムは何を意味しますか

PHPにおけるポリモーフィズムは何を意味しますか

藏色散人
藏色散人オリジナル
2021-05-08 09:15:012748ブラウズ

php のポリモーフィズムは文字通り「複数の形状」を意味し、複数の表現形式、つまり「1 つの外部インターフェイス、複数の内部実装メソッド」として理解できます。オブジェクト指向理論では、ポリモーフィズムは次のことを意味します。同じ操作を異なるクラスのインスタンスに適用すると、異なる実行結果が生成されます。

PHPにおけるポリモーフィズムは何を意味しますか

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

PHP 多態性

ポリモーフィズムとは、同じ操作、関数、またはプロセスが複数の種類のオブジェクトに作用し、異なる結果が得られることを意味します。同じメッセージを受信したときに、オブジェクトが異なれば結果も異なる場合があり、この現象はポリモーフィズムと呼ばれます。

ポリモーフィズムにより、各オブジェクトはそれ自体に適した方法で共通のメッセージに応答できます。ポリモーフィズムにより、ソフトウェアの柔軟性と再利用性が向上します。

オブジェクト指向ソフトウェア開発において、ポリモーフィズムは最も重要な部分の 1 つです。オブジェクト指向プログラミングは、単に関連するメソッドやデータを組み合わせるだけではなく、オブジェクト指向プログラミングのさまざまな要素を使用して、現実のさまざまな状況を明確に記述します。このセクションでは、オブジェクト指向プログラミングにおけるポリモーフィズムについて詳しく説明します。

1. ポリモーフィズムとは

ポリモーフィズムとは文字通り「複数の形状」を意味します。これは、「1 つの外部インターフェイスと複数の内部実装メソッド」という複数の表現形式として理解できます。オブジェクト指向理論におけるポリモーフィズムの一般的な定義は、「同じ操作が異なるクラスのインスタンスに適用されると、異なる実行結果が生成される」というものです。つまり、異なるタイプのオブジェクトが同じメッセージを受信すると、異なる結果が得られます。

実際のアプリケーション開発において、オブジェクト指向ポリモーフィズムを使用する主な目的は、異なるサブクラス オブジェクトを 1 つの親クラスとして扱うことができ、異なるサブクラス オブジェクト間に存在する差異をシールドできることです。コードを作成し、変化するニーズに適応する共通のプログラミングを作成します。

推奨学習:「PHP ビデオ チュートリアル

2. 実際のアプリケーション開発におけるポリモーフィック アプリケーション設計

将来的にプロジェクトを簡単に拡張およびアップグレードできるようにするには、通常、アップグレードを容易にするために継承を通じて再利用可能なモジュールを実装する必要があります。再利用可能なモジュールを設計する場合、フロー制御ステートメントの使用を可能な限り減らす必要があります。この時点で、ポリモーフィズムを使用してこのタイプの設計を実装できます。

[例] は、さまざまな種類の処理を実装するためのフロー制御ステートメントの一般的な使用法を示しています。コードを以下に示します。

class painter{ //定义油漆工类
public function paintbrush(){ //定义油漆工动作
echo "油漆工正在刷漆!\n";
}
}
class typist{ //定义打字员类
public function typed(){ //定义打字员工作
echo "打字员正在打字!\n";
}
}
function printworking($obj){ //定义处理类
if(objinstanceofpainter)//若对象是油漆工类,则显示油漆工动作$obj−>paintbrush();elseif(obj instanceof typist){ //若对象是打字员类,则显示打字员动作
$obj->typed();
}else{ //若非以上类,则显示出错信息
echo "Error: 对象错误!";
}
}
printworking(new painter()); //显示员工工作
printworking(new typist()); //显示员工工作

分析: 上記のプログラムでは、最初に 2 つの従業員クラス (ペインター クラスとタイピスト クラス) が定義されています。次に、定義した従業員であるかどうかを判定し、従業員の勤務状況を出力する処理機能を定義します。結果を以下に示します。

油漆工正在刷漆  
打字员正在打字

上記のプログラムから、複数の従業員の勤務状況を表示したい場合は、最初に従業員クラスを定義し、その従業員クラスで従業員の作業を定義してから、次を使用する必要があることが簡単にわかります。 printworking() 関数 elseif ステートメントを追加して、オブジェクトがどの従業員クラスのインスタンスであるかを確認します。これは実際のアプリケーションでは非常に望ましくないことです。このときポリモーフィズムを利用すれば、この問題は簡単に解決できる。

最初に従業員の親クラスを作成できます。すべての従業員クラスは従業員の親クラスを継承し、親クラスのすべてのメソッドと属性を継承します。次に、従業員クラスに「である」関係を作成して、従業員が法的な従業員であるかどうかを判断します。

[例] 上記の例をポリモーフィズムを使用して書き換えます。コードを以下に示します。

class employee{//定义员工父类
protected function working(){//定义员工工作,需要在子类的实现
echo "本方法需要在子类中重载!";
}
}
class painter extends employee{//定义油漆工类
public function working(){//实现继承的工作方法
echo "油漆工正在刷漆!\n";
}
}
class typist extends employee{//定义打字员类
public function working(){
echo "打字员正在打字!\n";
}
}
class manager extends employee{//定义经理类
public function working(){
echo "经理正在开会!";
}
}
function printworking($obj){//定义处理方法
if($obj instanceof employee){//若是员工对象,则显示其工作状态
$obj->working();
}else{//否则显示错误信息
echo "Error: 对象错误!";
}
}
printworking(new painter());//显示油漆工的工作
printworking(new typist());//显示打字员的工作
printworking(new manager());//显示经理的工作

分析: 上記のプログラムでは、まず従業員基本クラスを定義します。 、従業員の勤務状況を把握する方法を定義します。次に、従業員基本クラスから継承する 3 つの従業員クラス (Painter、Typist、および Manager) を定義します。次に、従業員の勤務状況を表示するメソッドを定義します。そして、このメソッドで「is-one」関係を作成し、それが法的な従業員であるかどうかを判断します。結果を以下に示します。

油漆工正在刷漆! 
打字员正在打字! 
经理正在开会!

上記の例から、追加される従業員クラスの数に関係なく、実装する必要があるのは従業員クラスと従業員の親クラスから継承されたメソッドのみであることがわかります。従業員の勤務状況を表示するprinting()メソッドを変更する必要はありません。

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

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