PHP ポリモーフィズムを理解する

不言
リリース: 2023-04-02 13:30:02
オリジナル
1889 人が閲覧しました

この記事では主に、一定の参考価値のある PHP ポリモーフィズムの理解を紹介します。今、それをみんなに共有します。必要な友人はそれを参照してください。

PHP ポリモーフィズム

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

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

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

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

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

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

2. ポリモーフィックなアプリケーション設計

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

class painter{ //定义油漆工类
       public function paintbrush(){                 //定义油漆工动作
           echo "油漆工正在刷漆!\n";
       }
   }
class typist{                                    //定义打字员类
       public function typed(){                     //定义打字员工作
           echo "打字员正在打字!\n";
       }
   }
function printworking($obj){                    //定义处理类
       if($obj instanceof painter){                //若对象是油漆工类,则显示油漆工动作
           $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 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP ファイル プログラミングの概要

基本的な PHP 構文の概要

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

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