Maison  >  Article  >  développement back-end  >  Explication détaillée du polymorphisme orienté objet PHP (exemple de code)

Explication détaillée du polymorphisme orienté objet PHP (exemple de code)

易达
易达original
2020-05-26 15:46:492552parcourir

Objectifs de cet article :

1. Comprendre la définition du polymorphisme

2 Comprendre le rôle du polymorphisme

3. Comprendre les scénarios d'utilisation du polymorphisme

4. Maîtriser la mise en œuvre spécifique du polymorphisme

Toujours en suivant la pensée cohérente précédente, nous apprenons grâce à la méthode 3W1H, alors comprenons d'abord

(1) Comprendre le polymorphisme La définition de

Comme il peut y avoir de nombreuses implémentations de méthodes dans une interface, les implémentations spécifiques des méthodes définies dans l'interface sont diverses. Cette fonctionnalité est appelée "

Polymorphisme"

-. Par exemple, l'interface A a deux implémentations, B et C. B et C peuvent avoir des méthodes différentes définies dans A. Ce phénomène est le polymorphisme

(2), comprendre le polymorphisme Le rôle de

est pour permettre à une interface d'avoir différentes implémentations, ce qui rend le code plus pertinent pour le monde réel. Cette approche réduit la distance entre le code et le monde réel, permettant aux développeurs d'implémenter plus facilement une logique métier complexe dans l'implémentation

(3) Comprendre les scénarios d'utilisation du polymorphisme

En fait, ce scénario d'utilisation, une fois que l'on décide d'utiliser une interface, ce phénomène apparaîtra, car une fois qu'une interface a différentes classes d'implémentation, ce phénomène Cela se produira essentiellement, car nous espérons souvent qu'une ou plusieurs méthodes dans une interface peuvent avoir différentes implémentations spécifiques

-Par exemple, la façon de manger, chaque animal a sa propre façon de manger. directement sans penser à l'hygiène, donc ils ne lavent pas la nourriture avant de manger. Mais les humains sont des animaux avancés, donc ils font attention à l'hygiène de base (sauf pour les malades mentaux), se lavent avant de manger et jugent que certaines choses doivent être cuit avant de manger. Et en raison des différences culturelles, chaque pays mange également de différentes manières. Par exemple, les Indiens mangent directement avec leurs mains, tandis que les Chinois mangent avec des baguettes, et certains pays occidentaux utilisent des fourchettes. est très courant dans la vie réelle. La même chose est vraie pour beaucoup d'autres choses, donc le phénomène de polymorphisme est également très courant, et nous écrivons du code en utilisant une programmation orientée objet, il est donc inévitable que nous rencontrions également du « polymorphisme », et afin de rendre notre Pour rendre le code plus pertinent par rapport au monde réel, nous devons également utiliser le "polymorphisme"

(4), maîtriser l'implémentation spécifique du polymorphisme

Résumé :


1. La définition du polymorphisme est que chaque interface peut avoir plusieurs implémentations différentes

Chaque résumé est obtenu par la pratique. Nous utilisons maintenant la pratique pour démontrer le résumé, ce qui peut favoriser la compréhension et faire de chacun. résumé compréhensible. C'est plus clair et plus intuitif

(5), code spécifique

1 Cas 1

Objectifs pratiques :

1. La définition du polymorphisme est que chaque interface peut avoir plusieurs implémentations différentes

<?php
//定义吃的接口
interface Eat{
    public function eat();
}
//定义猫的类
class Cat implements Eat{
    public function eat(){
        echo "我是猫,抓到喜欢的老鼠,直接吃<br/>";
    }
}
//定义人
class Human implements Eat{
    public function eat(){
        echo "我是人,吃东西之前,都会洗一下再吃,因为我要讲究基本的卫生<br/>";
    }
}

function Eat( $obj ){
    if( $obj instanceof Eat ){
        $obj->eat();
    }else{
        echo "该对象没有实现Eat的方法<br/>";
    }
}
$cat = new Cat();
$zs = new Human();
//这行代码看出,一个吃的方法,传递不同的具体实现,结果就是可以有不同的实现,这就是多态
Eat($cat);
Eat($zs);
?>

Le résultat de l'opération est :

Je suis un chat si j'attrape la souris que j'aime. , je vais le manger directement

Je suis un être humain, je me lave avant de manger car je dois faire attention à l'hygiène de base

(6) Appliquez ce que vous apprenez

Question : Utilisation de la programmation orientée objet La méthode simule la scène réelle suivante Le code doit refléter le concept de polymorphisme


Un vieil homme rural, Xiao Liu, élevait 5 poules et 5 chiens chaque matin. , il serait à l'heure à 6 heures. Levez-vous, faites cuire du porridge, et après avoir mangé du porridge, il portera 2 petits seaux de nourriture pour nourrir les poulets et les canards, marchera jusqu'au poulailler et versera l'un des seaux de du riz dans l'auge du poulet, puis se dirige vers la niche à côté, il a versé le seau de nourriture restant avec les restes dans l'auge du chien

Analyse de l'idée :

Analyse de l'objet : Le. les objets à l'intérieur sont le vieil homme, le poulet, le chien, la nourriture, il y a donc au moins ces 4 catégories

2. Analyse des attributs de l'objet : (combinée avec des scènes spécifiques + le monde réel)

Vieil homme : Nom


Poulets : Nombre

Chiens : Nombre

Nourriture : Nom

3. Analyse de la méthode objet : (Combiné avec des scénarios spécifiques + réel monde)

Vieil homme : se lever, cuisiner du porridge, manger (manger du porridge), nourrir


Poulet : manger (picorer du riz pour manger)

Chien : manger (manger des os)

Nourriture : définir le nom de l'aliment


4. Sur la base de l'analyse ci-dessus, nous avons constaté que trois des objets ont des façons de manger, mais ils ont des façons différentes façons de manger, afin que nous puissions rendre cela public. La méthode est extraite et transformée en interface, puis ces trois classes sont implémentées séparément

Le code d'implémentation spécifique est le suivant :

<?php
//定义吃的接口
interface Eat{
    public function eat($food);
}
//定义食物
class Food{
    public $name = "";
    public function __construct( $name ){
        $this->name = $name;
    }
}

//定义人
class Human implements Eat{
    public $name = "";
    public function __construct( $name ){
        $this->name = $name;
    }
    //起床
    public function wakeup(){
        echo $this->name."起床了<br/>";
    }
    //煮稀饭
    public function cook($food){
        echo $this->name."煮".$food->name."了<br/>";
    }
    public function eat($food){
        echo $this->name."吃了".$food->name."<br/>";
    }
    //喂食
    function startFeed( $obj,$food ){
        if( $obj instanceof Eat ){
            $obj->eat($food);
        }else{
            echo "该对象没有实现Eat的方法<br/>";
        }
    }

    public function feed($obj, $food){
        $this->startFeed( $obj,$food );
    }
}
//定义鸡的类
class Chiken implements Eat{
    public $count = 5;
    public function eat($food){
        echo $this->count."只小鸡们,都吃了".$food->name."<br/>";
    }
}
//定义狗的类
class Dog implements Eat{
    public $count = 5;
    public function eat($food){
        echo $this->count."只小狗们,都吃了".$food->name."<br/>";
    }
}

//创建对象
$xiaoliu = new Human("小刘");
$chikens = new Chiken();
$dogs = new Dog();
//创建食物
$xfFood = new Food("稀饭");
$seedsFood = new Food("米");
$mealFood = new Food("残羹剩饭");
//老人起床
$xiaoliu->wakeup();
//老人煮稀饭
$xiaoliu->cook($xfFood);
//老人吃稀饭
$xiaoliu->eat( $xfFood );
//老人喂食开始
$xiaoliu->feed($chikens,$seedsFood);//给小鸡喂食
$xiaoliu->feed($dogs,$mealFood);//给小狗喂食

?>

Le Le résultat courant est :


Xiao Liu s'est levé

Xiao Liu a cuit du porridge
Xiao Liu a mangé du porridge
Les 5 poulets ont tous mangé du riz
Les 5 chiots ont tous j'ai mangé les restes

(7) Résumé

1 Cet article parle principalement de la définition et de la fonction du polymorphisme, ainsi que de la mise en œuvre spécifique

J'espère que cet article pourra vous apporter un peu d'aide, merci ! ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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