Maison développement back-end tutoriel php 探讨PHP5多态性的具体实现方式_PHP教程

探讨PHP5多态性的具体实现方式_PHP教程

Jul 15, 2016 pm 01:28 PM
php5 spécifique exister 多态 实现 droite 探讨 支持 新版本 方式

PHP5作为一个新版本,实现了对迟绑定的支持,不过在实际应用中,迟绑定功能还存在一些问题,比如你使用的是更旧版本的PHP,那么你可能发现其中缺乏对于迟绑定的支持。我们今天为大家讲的就是关于一、 PHP 5和多态性

本文想讨论面向对象编程中最为重要的部分之一--多态性的设计。为了说明问题,我使用了PHP 5。在你继续阅读之前,请首先明确本文并不是完全有关于PHP的。尽管这种语言在以前的两个主要版本中在快速开发方面已经取得很大的进步,但是,在其与更为成熟的语言如C++或者Java相匹敌之前,它对于对象的支持还要经历一段历程。

如果你是一位面向对象编程的入门者,那么本文可能不适合你,因为PHP5多态性这部分知识比较特别:一旦理解了它,你将永远不会忘记。如果你想简单了解一点对象编程和设计知识,并且当某人说"某个对象是多态的"时,还不十分清楚这是什么意思的话,那么本文正适合你。

到本文最后,你应该知道什么是多态性以及如何把它应用到面向对象的设计中,并且你会了解PHP 5中对象编程的优点与不足。

二、什么是多态性?

多态性,其来自于dictionary.com的定义是"以不同形式,阶段或者类型出现在独立的组织中或者同种组织中,而不存在根本区别。"由该定义,我们可以认为,多态性是一种通过多种状态或阶段来描述相同对象的编程方式。其实,它的真正意义在于:实际开发中,我们只需要关注一个接口或基类的编程,而不必担心一个对象所属于的具体类(class)。

如果你熟悉设计模式,即使只是有个初步了解,那么你也会了解这个概念。事实上,PHP5多态性可能是基于模式设计编程中的最伟大的工具。它允许我们以一种逻辑的方式来组织相类似的对象从而实现在具体编码时不必担心对象的具体类型;而且,我们只需要对一个所期望的接口或基类编程即可。一个应用程序越抽象,则它就显得越灵活--而多态性是对行为加以抽象的最好的方式之一。

例如,让我们考虑一个叫Person的类。我们可以用称为David,Charles和Alejandro的类来子类化Person。Person有一个抽象方法AcceptFeedback(),所有的子类都要实现这个方法。这意味着,任何使用基类Person的子类的代码都能调用方法AcceptFeedback()。你不必检查该对象是一个David还是一个Alejandro,仅知道它是一个Person就够了。结果是,你的代码只需关注"最小公分母"-Person类即可。

在这个示例中的Person类也可以被创建为一个接口。当然,与上面相比存在一些区别,主要在于:一个接口并没有给出任何行为,而仅确定了一组规则。一个Person接口要求的是"你必须支持AddFeedback()方法",而一个Person类可以提供一些AddFeedback()方法的缺省代码-你对之的理解可以是"如果你不选择支持AddFeedback(),那么你应该提供一种缺省实现。"至于如何选择接口或基类则并非本文的主题;但是,一般说来,你需要通过基类来实现一个缺省的方法。如果你能够简单地勾勒出你的类所要实现的一组期望的功能,那么你也可以使用一个接口。

三、应用PHP5多态性设计

我们将继续使用Person基类的例子,现在让我们分析一个非多态性的实现。下列示例中使用了不同类型的Person对象--这是一种非常不理想的编程方式。注意,实际的Person类被省略。目前为止,我们仅关心代码调用的问题。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<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>

Copier après la connexion

这个示例展示了行为不同的对象,还有一个switch语句用于区分不同的Person类对象,从而执行其各自相应的正确操作。注意,这里针对不同条件的回馈注释是不同的。在实际应用程序开发中可能不会出现这种情形;我仅为了简单地说明类实现中存在的区别。

下面的一个示例使用了PHP5多态性。

1

2

3

4

5

6

7

8

9

10

11

<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>

Copier après la connexion

注意,这里没有switch语句,而最重要的是,缺乏有关Person::GetPerson()会返回什么类型的对象。而另一个Person::AddFeedback()是一个多态方法。行为完全是由具体类进行封装的。请记住,在此无论我们使用的是David,Charles还是Alejandro,调用代码从不必了解具体类的功能,而仅知道基类就可以了。

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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>

Copier après la connexion

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


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446414.htmlTechArticlePHP5作为一个新版本,实现了对迟绑定的支持,不过在实际应用中,迟绑定功能还存在一些问题,比如你使用的是更旧版本的PHP,那么你可能...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Mar 24, 2024 am 11:27 AM

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Avec l’essor des réseaux sociaux, WeChat est devenu l’un des outils de communication indispensables dans la vie quotidienne des gens. Cependant, de nombreuses personnes peuvent rencontrer un problème : se connecter à plusieurs comptes WeChat en même temps sur le même téléphone mobile. Pour les utilisateurs de téléphones mobiles Huawei, il n'est pas difficile d'obtenir une double connexion WeChat. Cet article explique comment obtenir une double connexion WeChat sur les téléphones mobiles Huawei. Tout d'abord, le système EMUI fourni avec les téléphones mobiles Huawei offre une fonction très pratique : l'ouverture d'une double application. Grâce à la fonction de double ouverture de l'application, les utilisateurs peuvent simultanément

Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Mar 24, 2024 pm 06:03 PM

Comment mettre en œuvre la fonction de clonage WeChat sur les téléphones mobiles Huawei Avec la popularité des logiciels sociaux et l'importance croissante accordée à la confidentialité et à la sécurité, la fonction de clonage WeChat est progressivement devenue le centre d'attention. La fonction de clonage WeChat peut aider les utilisateurs à se connecter simultanément à plusieurs comptes WeChat sur le même téléphone mobile, ce qui facilite la gestion et l'utilisation. Il n'est pas difficile de mettre en œuvre la fonction de clonage WeChat sur les téléphones mobiles Huawei. Il vous suffit de suivre les étapes suivantes. Étape 1 : Assurez-vous que la version du système de téléphonie mobile et la version de WeChat répondent aux exigences. Tout d'abord, assurez-vous que la version de votre système de téléphonie mobile Huawei a été mise à jour vers la dernière version, ainsi que l'application WeChat.

Guide de programmation PHP : méthodes pour implémenter la séquence de Fibonacci Guide de programmation PHP : méthodes pour implémenter la séquence de Fibonacci Mar 20, 2024 pm 04:54 PM

Le langage de programmation PHP est un outil puissant pour le développement Web, capable de prendre en charge une variété de logiques et d'algorithmes de programmation différents. Parmi eux, l’implémentation de la séquence de Fibonacci est un problème de programmation courant et classique. Dans cet article, nous présenterons comment utiliser le langage de programmation PHP pour implémenter la séquence de Fibonacci et joindrons des exemples de code spécifiques. La suite de Fibonacci est une suite mathématique définie comme suit : le premier et le deuxième élément de la suite valent 1, et à partir du troisième élément, la valeur de chaque élément est égale à la somme des deux éléments précédents. Les premiers éléments de la séquence

La carte au trésor apparaît dans 'Zero Era'. Cherchons des trésors ensemble et célébrons le 1er mai ! La carte au trésor apparaît dans 'Zero Era'. Cherchons des trésors ensemble et célébrons le 1er mai ! May 03, 2024 pm 12:43 PM

La légende de "Zero Age" raconte qu'il y a longtemps, il y avait un avare nommé Pan God. Il a collecté une grande quantité de trésors au cours de sa vie, mais après sa mort, ces trésors ont également disparu, ne laissant qu'une rumeur selon laquelle Pan God a construit un énorme trésor. mausolée labyrinthique, a caché le trésor à l'intérieur, mais malheureusement personne ne l'a encore trouvé. Ce n'est qu'en jouant votre vie que vous pourrez trouver ces trésors sans égal. Oserez-vous parier sur ce jeu ? Si vous trouvez le coffre au trésor, vous pourriez obtenir des accessoires de développement d'équipement et un mystérieux paquet de pièces d'argent. Alors, où trouve-t-on la carte au trésor ? Vous pouvez l'obtenir lors de missions commerciales quotidiennes. Il existe trois types de cartes au trésor : la carte au trésor d'Islande, la carte au trésor de la nature sauvage et la carte au trésor de la forêt tropicale. Vous pouvez découvrir des trésors en trouvant l'emplacement du trésor indiqué sur la carte au trésor. Et en cherchant des trésors, vous rencontrerez au hasard différents événements : il y a une chance que le BOSS qui garde le trésor soit alerté et que le BOSS meure.

Table de fonctions virtuelles C++ et implémentation polymorphe, comment éviter le gaspillage de mémoire Table de fonctions virtuelles C++ et implémentation polymorphe, comment éviter le gaspillage de mémoire May 31, 2024 pm 07:03 PM

Les classes de base virtuelles optimisent la surcharge de mémoire des tables virtuelles en permettant l'héritage de plusieurs classes de base sans créer de tables virtuelles supplémentaires. Dans le code optimisé, la classe de base de forme n'a plus de table de fonctions virtuelles et les classes cercle et rectangle partagent la même table de fonctions virtuelles, réduisant ainsi la consommation de mémoire.

Découvrez comment Golang offre des possibilités de développement de jeux Découvrez comment Golang offre des possibilités de développement de jeux Mar 16, 2024 pm 12:57 PM

Dans le domaine actuel du développement logiciel, Golang (langage Go), en tant que langage de programmation efficace, concis et hautement simultané, est de plus en plus favorisé par les développeurs. Sa riche bibliothèque de normes et ses fonctionnalités de concurrence efficaces en font un choix de premier plan dans le domaine du développement de jeux. Cet article explorera comment utiliser Golang pour le développement de jeux et démontrera ses puissantes possibilités à travers des exemples de code spécifiques. 1. Avantages de Golang dans le développement de jeux. En tant que langage typé statiquement, Golang est utilisé dans la construction de systèmes de jeux à grande échelle.

La nouvelle version de 'Onmyoji' 'The Gods of Fortune Parade' sera lancée, et la version événement 'The Gods of Fortune Parade' arrive ! La nouvelle version de 'Onmyoji' 'The Gods of Fortune Parade' sera lancée, et la version événement 'The Gods of Fortune Parade' arrive ! Mar 30, 2024 pm 02:56 PM

La nouvelle version de "Onmyoji" "The God of Fortune Parade" sera lancée le 3 avril, et la version événement "The God of Fortune Parade" débutera également ! Venez tuer les monstres marins envahisseurs et embarquez pour un voyage vers rassemblez la chance ensemble - [Version Event" "Versez le Dieu de la Fortune"] - Heure de l'événement - Après maintenance le 3 avril - 23h59 le 9 avril [Introduction au jeu] Cet événement comprend : l'extermination du monstre marin, des anecdotes sur le retour de loin, la collecte de fortune, les cartes-cadeaux du Dieu de la Fortune et la visite des magasins. En attendant le jeu, Onmyoji avec un niveau ≥15 peut cliquer sur la lumière du matin Ebisu dans la cour ou sur le petit bonhomme de papier dans le coin supérieur droit du cour pour participer à l'activité. - Battez le Kraken - Consommez "Taiyayaki" ou "Stamina" pour obtenir des récompenses d'événement. Chenhui Ebisu participera également à la bataille ensemble ! Si vous réussissez le défi, vous recevrez des récompenses telles que des « Lucky Bubbles » et des « Lucky God Bonds ». À mesure que le nombre de niveaux d'extermination du Kraken augmente, vous pouvez obtenir

'Zero Era' ouvre une nouvelle ère qui allie technologie et magie ! 'Zero Era' ouvre une nouvelle ère qui allie technologie et magie ! Jun 02, 2024 am 09:45 AM

"Zero Era" est un jeu de rôle en ligne massivement multijoueur futuriste en 2,5D représenté par Hip Hop Tribe Platform. Il prend pour thème la reconstruction du monde post-apocalyptique et présente un nouveau monde mystérieux où la magie et la technologie coexistent. technologie, automatique Un gameplay innovant tel que des compétences créatives démontre pleinement la culture steampunk pleine de changements et d'imagination sans fin. En plus de protéger les personnages et de réduire les dégâts subis au cours des aventures, l'équipement peut également augmenter le potentiel des personnes jusqu'à la limite, permettant aux aventuriers d'exercer une force extraordinaire. Pour les aventuriers, posséder un équipement particulier est même un symbole d’identité et d’expérience. L'équipement est divisé en 6 niveaux de qualité : commun (blanc), bon (vert), excellent (bleu), rare (violet), héroïque (rose) et légendaire (orange). ordinaire(

See all articles