ホームページ バックエンド開発 PHPチュートリアル PHP5ポリモーフィズムの具体的な実装方法を議論する_PHPチュートリアル

PHP5ポリモーフィズムの具体的な実装方法を議論する_PHPチュートリアル

Jul 15, 2016 pm 01:28 PM
php5 特定の 存在する ポリモーフィズム 成し遂げる 話し合う サポート 新しいバージョン 方法

PHP5 は新しいバージョンとして遅延バインディングのサポートを実装していますが、実際のアプリケーションでは、たとえば、古いバージョンの PHP を使用している場合、次のような問題が発生する可能性があります。遅延バインディングのサポートがありません。今日私たちが話しているのは 1 についてです。PHP 5 とポリモーフィズム

この記事では、オブジェクト指向プログラミングの最も重要な部分の 1 つであるポリモーフィズムの設計について説明したいと思います。問題を説明するために、私は PHP 5 を使用しています。読み続ける前に、この記事は完全に PHP に関するものではないことを明確にしてください。この言語は過去 2 つのメジャー バージョンにわたって急速な開発で大きな進歩を遂げてきましたが、オブジェクトのサポートが C++ や Java コースのようなより成熟した言語に匹敵するまでにはまだ時間がかかります。

あなたがオブジェクト指向プログラミングの初心者である場合、この記事はあなたには適していないかもしれません。なぜなら、PHP5 ポリモーフィズムのこの部分は特別であり、一度理解すると決して忘れることはできないからです。オブジェクト プログラミングと設計について少し学びたいが、「オブジェクトはポリモーフィックである」と言われることが何を意味するのかよくわからない場合は、この記事が最適です。

この記事を読み終えるまでに、ポリモーフィズムとは何か、それをオブジェクト指向設計に適用する方法を理解し、PHP 5 でのオブジェクト プログラミングの長所と短所を理解できるようになります。

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

Dictionary.com からのポリモーフィズムの定義は、「根本的な違いが存在せずに、独立した組織または同じ組織内で異なる形式、段階、またはタイプで現れること」と考えられます。複数の状態またはフェーズを通じて同じオブジェクトを記述するプログラミング方法としてのポリモーフィズム。実際、その本当の意味は、実際の開発では、インターフェイスまたは基本クラスのプログラミングにのみ集中する必要があり、オブジェクトが属する特定のクラス (クラス) について心配する必要がないことです。

デザインパターンに精通していれば、たとえ予備的な理解だけでも、この概念を理解できるでしょう。実際、PHP5 ポリモーフィズムは、パターンベースの設計プログラミングにおける最大のツールである可能性があります。これにより、同様のオブジェクトを論理的な方法で編成できるため、コーディング時にオブジェクトの特定のタイプを気にする必要がなくなり、さらに、必要なインターフェイスまたは基本クラスをプログラムするだけで済みます。アプリケーションが抽象的であればあるほど、柔軟性は高まります。ポリモーフィズムは動作を抽象化する最良の方法の 1 つです。

たとえば、「person」というクラスについて考えてみましょう。 David、Charles、Alejandro というクラスを使用して person をサブクラス化できます。 Person には抽象メソッド AcceptFeedback() があり、すべてのサブクラスはこのメソッドを実装する必要があります。これは、基本 Person クラスのサブクラスを使用するコードはどれも AcceptFeedback() メソッドを呼び出すことができることを意味します。オブジェクトがデビッドであるかアレハンドロであるかを確認する必要はありません。それが人であることがわかれば十分です。その結果、コードは「最小公倍数」である Person クラスにのみ焦点を当てる必要があります。

この例の Person クラスはインターフェースとして作成することもできます。もちろん、上記のものと比較するといくつかの違いがあります。主に、インターフェイスは動作を与えず、一連のルールを決定するだけです。 Person インターフェイスでは「AddFeedback() メソッドをサポートする必要がある」必要がありますが、一方、Person クラスでは AddFeedback() メソッドのデフォルト コードを提供できます。これについての理解は、「AddFeedback() のサポートを選択しない場合は、デフォルトの実装を提供する必要があります。「インターフェイスまたは基本クラスの選択方法については、この記事の主題ではありませんが、一般に、基本クラスを通じてデフォルト メソッドを実装する必要があります。クラスが実装する必要な機能セットの概要を簡単に説明できる場合は、インターフェイスを使用することもできます。

3. PHP5 ポリモーフィズム設計の適用

引き続き Person 基本クラスの例を使用し、非ポリモーフィック実装を分析してみましょう。次の例では、さまざまなタイプの Person オブジェクトを使用していますが、これは非常に不満足なプログラミング方法です。実際の Person クラスは省略されていることに注意してください。これまでのところ、コード呼び出しの問題のみに注目してきました。

<ol class="dp-xml">
<li class="alt"><span><span><?php   </span></span></li>
<li class="">
<span> $</span><span class="attribute"><font color="#ff0000">name</font></span><span> = $_SESSION['name'];   </span>
</li>
<li class="alt">
<span> $</span><span class="attribute"><font color="#ff0000">myPerson</font></span><span> = Person::GetPerson($name);   </span>
</li>
<li class=""><span> switch (get_class($myPerson)){   </span></li>
<li class="alt"><span>case 'David' :   </span></li>
<li class=""><span> $myPerson->AddFeedback('Great Article!','Some Reader', date('Y-m-d'));   </span></li>
<li class="alt"><span> break;   </span></li>
<li class=""><span>case 'Charles':   </span></li>
<li class="alt"><span> $myPerson->feedback[] = array('Some Reader', 'Great Editing!');   </span></li>
<li class=""><span> break;   </span></li>
<li class="alt"><span>case 'Alejandro' :   </span></li>
<li class=""><span> $myPerson->Feedback->Append('Awesome JavaScript!');   </span></li>
<li class="alt"><span> break;   </span></li>
<li class=""><span>default :   </span></li>
<li class="alt"><span> $myPerson->AddFeedback('Yay!');   </span></li>
<li class=""><span> }   </span></li>
<li class="alt"><span>?> </span></li>
</ol>
ログイン後にコピー

この例は、さまざまな動作を持つオブジェクトを示しており、switch ステートメントを使用してさまざまな Person クラス オブジェクトを区別し、それぞれの正しい操作を実行します。ここでのフィードバック コメントは条件によって異なることに注意してください。これは実際のアプリケーション開発には当てはまらない可能性があります。ここでは、クラスの実装に存在する違いを説明するだけです。

以下の例では、PHP5 ポリモーフィズムを使用しています。

<ol class="dp-xml">
<li class="alt"><span><span><?php   </span></span></li>
<li class="">
<span> $</span><span class="attribute"><font color="#ff0000">name</font></span><span> = $_SESSION['name'];   </span>
</li>
<li class="alt">
<span> $</span><span class="attribute"><font color="#ff0000">myPerson</font></span><span> = Person::GetPerson($name);   </span>
</li>
<li class=""><span> $myPerson->AddFeedback('Great Article!', 'SomeReader', date('Y-m-d'));   </span></li>
<li class="alt"><span>?> </span></li>
</ol>
ログイン後にコピー

ここには switch ステートメントがないことに注意してください。そして最も重要なことは、Person::GetPerson() が返すオブジェクトの種類についての情報が欠如していることです。もう 1 つの Person::AddFeedback() はポリモーフィック メソッドです。動作は具象クラスによって完全にカプセル化されます。ここで David、Charles、または Alejandro を使用するかどうかに関係なく、呼び出し元のコードは具象クラスの動作を知る必要はなく、基本クラスのみを知る必要があることに注意してください。

尽管我的示例并不完美,但是,从调用代码的角度,它已经展示了PHP5多态性的基本用法。现在我们需要分析这些类的内部实现。从一个基类进行派生的一个最伟大的地方在于,该派生类能够存取父类的行为,这种情况常常是缺省的实现,但是也可能出现在类继承链中用于创建更为复杂的行为。下面是这种情况的一个简单展示。

<ol class="dp-xml">
<li class="alt"><span><span><?php   </span></span></li>
<li class=""><span>class Person{   </span></li>
<li class="alt"><span> function AddFeedback($comment, $sender, $date){   </span></li>
<li class=""><span>//把回馈添加到数据库   </span></li>
<li class="alt"><span> }   </span></li>
<li class=""><span>}   </span></li>
<li class="alt"><span>class David extends Person{   </span></li>
<li class=""><span> function AddFeedback($comment, $sender){   </span></li>
<li class="alt"><span>parent::AddFeedback($comment, $sender,   </span></li>
<li class=""><span>date('Y-m-d'));   </span></li>
<li class="alt"><span> }   </span></li>
<li class=""><span>}   </span></li>
<li class="alt"><span>?> </span></li>
</ol>
ログイン後にコピー

在此,David类中的AddFeedback方法实现中首先调用了Person::AddFeedback方法。你可能注意到,它模仿了C++,Java或C#中的方法重载。请记住,这仅是一个简单化的示例,并且你编写的PHP5多态性实际代码完全依赖于你的实际工程。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446414.htmlTechArticlePHP5作为一个新版本,实现了对迟绑定的支持,不过在实际应用中,迟绑定功能还存在一些问题,比如你使用的是更旧版本的PHP,那么你可能...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか? Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか? Mar 24, 2024 am 11:27 AM

Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか?ソーシャルメディアの台頭により、WeChatは人々の日常生活に欠かせないコミュニケーションツールの1つになりました。ただし、多くの人は、同じ携帯電話で同時に複数の WeChat アカウントにログインするという問題に遭遇する可能性があります。 Huawei 社の携帯電話ユーザーにとって、WeChat の二重ログインを実現することは難しくありませんが、この記事では Huawei 社の携帯電話で WeChat の二重ログインを実現する方法を紹介します。まず第一に、ファーウェイの携帯電話に付属するEMUIシステムは、デュアルアプリケーションを開くという非常に便利な機能を提供します。アプリケーションのデュアルオープン機能により、ユーザーは同時に

PHP プログラミング ガイド: フィボナッチ数列を実装する方法 PHP プログラミング ガイド: フィボナッチ数列を実装する方法 Mar 20, 2024 pm 04:54 PM

プログラミング言語 PHP は、さまざまなプログラミング ロジックやアルゴリズムをサポートできる、Web 開発用の強力なツールです。その中でも、フィボナッチ数列の実装は、一般的で古典的なプログラミングの問題です。この記事では、PHP プログラミング言語を使用してフィボナッチ数列を実装する方法を、具体的なコード例を添付して紹介します。フィボナッチ数列は、次のように定義される数学的数列です。数列の最初と 2 番目の要素は 1 で、3 番目の要素以降、各要素の値は前の 2 つの要素の合計に等しくなります。シーケンスの最初のいくつかの要素

Huawei携帯電話にWeChatクローン機能を実装する方法 Huawei携帯電話にWeChatクローン機能を実装する方法 Mar 24, 2024 pm 06:03 PM

Huawei 携帯電話に WeChat クローン機能を実装する方法 ソーシャル ソフトウェアの人気と人々のプライバシーとセキュリティの重視に伴い、WeChat クローン機能は徐々に人々の注目を集めるようになりました。 WeChat クローン機能を使用すると、ユーザーは同じ携帯電話で複数の WeChat アカウントに同時にログインできるため、管理と使用が容易になります。 Huawei携帯電話にWeChatクローン機能を実装するのは難しくなく、次の手順に従うだけです。ステップ 1: 携帯電話システムのバージョンと WeChat のバージョンが要件を満たしていることを確認する まず、Huawei 携帯電話システムのバージョンと WeChat アプリが最新バージョンに更新されていることを確認します。

宝の地図は「ゼロ時代」に登場します。一緒に宝を探してメーデーを祝いましょう! 宝の地図は「ゼロ時代」に登場します。一緒に宝を探してメーデーを祝いましょう! May 03, 2024 pm 12:43 PM

「ゼロエイジ」の伝説によれば、その昔、パン神という守銭奴が生前に大量の財宝を集めていたが、彼の死後、それらの宝物も消滅し、パン神が巨大な建造物を建てたという噂だけが残った。迷路霊廟の中に宝物が隠されていましたが、残念ながらまだ誰も見つけていません。命を賭してのみ、この比類のない宝を見つけることができます。このゲームに賭けてみませんか? 宝箱を見つければ、装備開発の小道具や謎の銀貨のパッケージが手に入るかもしれません。それで、宝の地図はどこで入手できますか?デイリービジネスミッションから入手できます。 宝の地図にはアイスランドの宝の地図、荒野の宝の地図、熱帯雨林の宝の地図の3種類があります。 宝の地図にマークされている宝の場所を見つけると、宝を掘り出すことができます。また、宝物を掘っていると、さまざまなイベントがランダムに発生します。宝物を守っている BOSS に警告が発せられ、BOSS が死亡する可能性があります。

C++ 仮想関数テーブルとポリモーフィック実装、メモリの無駄を避ける方法 C++ 仮想関数テーブルとポリモーフィック実装、メモリの無駄を避ける方法 May 31, 2024 pm 07:03 PM

仮想基本クラスは、追加の vtable を作成せずに複数の基本クラスからの継承を許可することで、vtable のメモリ オーバーヘッドを最適化します。最適化されたコードでは、形状基本クラスに仮想関数テーブルがなくなり、円クラスと長方形クラスが同じ仮想関数テーブルを共有するため、メモリ消費量が削減されます。

Golang がゲーム開発の可能性を可能にする方法をマスターする Golang がゲーム開発の可能性を可能にする方法をマスターする Mar 16, 2024 pm 12:57 PM

今日のソフトウェア開発分野では、効率的で簡潔かつ同時実行性の高いプログラミング言語として、Golang (Go 言語) が開発者にますます好まれています。豊富な標準ライブラリと効率的な同時実行機能により、ゲーム開発の分野で注目を集めています。この記事では、ゲーム開発に Golang を使用する方法を検討し、具体的なコード例を通じてその強力な可能性を示します。 1. ゲーム開発における Golang の利点 Golang は静的型付け言語として、大規模なゲーム システムの構築に使用されます。

『陰陽師』新バージョン「福の神パレード」登場&バージョンイベント「福の神パレード」開催! 『陰陽師』新バージョン「福の神パレード」登場&バージョンイベント「福の神パレード」開催! Mar 30, 2024 pm 02:56 PM

『陰陽師』新バージョン「福の神パレード」が4月3日より配信開始、バージョンイベント「福の神パレード」もスタート! 襲来する海の怪物を討伐し、世界への旅に出ましょう。一緒に運を集めよう 【バージョンイベント「福の神の注ぎ」】 開催時間 4月3日メンテナンス後~4月9日23:59 【遊び方紹介】 イベント内容:海の怪物退治、逸話遠方からの帰還、おみくじの収集、福の神からのギフトカード、お店訪問について ゲームプレイを待っている間、レベル 15 以上の陰陽師は、中庭にある朝の光の恵比寿、または画面右上の小さな紙屋をクリックしてください。中庭でアクティビティに参加できます。・クラーケンを倒す ・「たいや焼き」または「スタミナ」を消費してイベント報酬を獲得します。戎陳慧も一緒に参戦! 挑戦に成功すると「福の泡」や「福神の絆」などの報酬がもらえます。クラーケン退治のレベル数が上がると、以下のアイテムを獲得できます。

テクノロジーと魔法が融合する新時代「ゼロエラ」が幕を開ける! テクノロジーと魔法が融合する新時代「ゼロエラ」が幕を開ける! Jun 02, 2024 am 09:45 AM

『Zero Era』は、Hip Hop Tribe Platformを代表とする、終末世界の再構築をテーマに、魔法とテクノロジーが共存する不思議な新世界を表現する2.5D未来ファンタジー多人数参加型オンラインゲームです。テクノロジー、自動創造的なスキルなどの革新的なゲームプレイは、無限の変化と想像力に満ちたスチームパンク文化を十分に発揮します。装備品はキャラクターを守り、冒険中に受けるダメージを軽減するだけでなく、人の潜在能力を限界まで高め、冒険者が並外れた力を発揮することもできます。冒険者にとって、特別な装備を持つことはアイデンティティと経験の象徴ですらあります。装備は、コモン (白)、グッド (緑)、エクセレント (青)、レア (紫)、ヒロイック (ピンク)、レジェンド (オレンジ) の 6 つの品質レベルに分かれています。普通(

See all articles