ホームページ  >  記事  >  バックエンド開発  >  PHPポリモーフィズムの実装を詳しく解説_PHPチュートリアル

PHPポリモーフィズムの実装を詳しく解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:07:48707ブラウズ

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

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

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

1. ポリモーフィズムとは何ですか?

ポリモーフィズムとは文字通り「複数の形状」を意味します。これは、「1 つの外部インターフェイスと複数の内部実装メソッド」という複数の表現形式として理解できます。オブジェクト指向理論におけるポリモーフィズムの一般的な定義は次のとおりです。同じ操作を異なるクラスのインスタンスに適用すると、異なる実行結果が生成されます。つまり、異なるタイプのオブジェクトが同じメッセージを受信すると、異なる結果が得られます。実際のアプリケーション開発において、オブジェクト指向ポリモーフィズムを使用する主な理由は、異なるサブクラス オブジェクトを 1 つの親クラスとして扱うことができ、異なるサブクラス オブジェクト間の差異をシールドして、変更に適応するために共通のコードと共通のプログラミングを作成できることです。ニーズ。



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


【例】は、各種処理を実現するために通常使用されるフロー制御文の例です。
コードを以下に示します。

コードをコピーします コードは次のとおりです:

class Painter{ Paint! //タイピスト クラスを定義しますthrough through out out off out off ’s ‐ to ‐使用する 使用する 使用する ($ obj instance of the obj-> / 従業員の作業を表示
Printworking (new typist ()); // 従業員の作業を表示




分析:

上記の手順では、Typist クラスです。次に、定義した従業員であるかどうかを判定し、従業員の勤務状況を出力する処理関数を定義します。結果を以下に示します。

画家は絵を描いています
タイピストはタイピングしています

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

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


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


コードをコピーします
コードは次のとおりです:

classemployee{//従業員の親クラスを定義します
保護関数 working(){//サブクラスに実装する必要がある従業員の仕事を定義します
echo "このメソッドはサブクラスでオーバーロードする必要があります!";
}
}
class Painter extends member{//ペインター クラスを定義する
public function working(){//継承された作業メソッドを実装する
echo "ペインターは絵を描いています!/n";
}
}
class typist extends従業員{//タイピストを定義しますクラス
パブリック関数working(){
echo "タイピストは入力中です!/n";
}
}
クラスマネージャーextendsemployee{//マネージャークラスを定義します
パブリック関数working() (){
echo "マネージャーは会議中です!";
}
}
function printworking($obj){//処理メソッドを定義します
if($objinstanceofemployee){//従業員オブジェクトの場合、動作ステータスを表示します
$obj- >working();
}else{//それ以外の場合、エラーメッセージが表示されます
echo "Error: Object error!";
}
}
printworking(new Painter()) ;//画家の作品を表示
printworking(new typist());//タイピストの作品を表示
printworking(new manager());//マネージャーの作品を表示
?>上記のプログラムでは、まず従業員の基本クラスを定義し、従業員の勤務状況のメソッドを定義します。次に、従業員基本クラスから継承する 3 つの従業員クラス (Painter、Typist、および Manager) を定義します。次に、従業員の勤務状況を表示するメソッドを定義します。そして、このメソッドで「is-one」関係を作成し、それが法的な従業員であるかどうかを判断します。結果を以下に示します。
画家は絵を描いています!
タイピストは入力しています!
マネージャーは会議中です!
上記の例から、従業員クラスを追加する必要があるのは、従業員クラスと従業員の親クラスから継承されたメソッド。従業員の勤務状況を表示するprinting()メソッドを変更する必要はありません。


http://www.bkjia.com/PHPjc/327527.html

www.bkjia.com本当http://www.bkjia.com/PHPjc/327527.html技術記事ポリモーフィズムとは、同じ操作、関数、または手順を複数の種類のオブジェクトに適用して、異なる結果が得られることを意味します。同じメッセージを受信するオブジェクトが異なれば、結果も異なります。これは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。