ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクト指向ポリモーフィズムの詳しい説明(コード例)

PHPオブジェクト指向ポリモーフィズムの詳しい説明(コード例)

易达
易达オリジナル
2020-05-26 15:46:492552ブラウズ

この記事の目的:

1. ポリモーフィズムの定義を理解する

2. ポリモーフィズムの役割を理解する

3. ポリモーフィズムの使用シナリオを理解する

4. ポリモーフィズムの具体的な実装をマスターする

これまでの考え方を踏襲しつつ、3W1Hの手法で学んでいきますので、まずはポリモーフィズムについて学びましょう

(1) ポリモーフィズムの定義を理解する

インターフェースには多くのメソッド実装が存在する可能性があるため、インターフェースで定義されるメソッドの具体的な実装は多様です。この機能は「ポリモーフィズム」と呼ばれます

-たとえば、インターフェイス A には、B と C という 2 つの実装があります。B と C は、A で定義された異なるメソッドを持つことができます。この現象はポリモーフィズムです

(2)、ポリモーフィズムを理解します関数

関数これは、コードが現実世界とより一貫性を持つように、インターフェイスに異なる実装を許可することです。この方法により、コードと現実世界の間の距離が縮まり、開発者は実装に複雑なビジネス ロジックをより簡単に実装できるようになります。

(3) ポリモーフィズムの使用シナリオを理解する

実は、この使用シナリオでは、インターフェイスを使用すると決めた場合、この現象が発生します。インターフェイスに実装クラスが異なるためです。多くの場合、インターフェイス内の 1 つまたは複数のメソッドが異なる特定の実装を持つことができることが望ましいため、この現象は基本的に発生します

-たとえば、すべての動物には独自の食事方法があります。ラットとネコは直接食事をし、衛生のことを考えないので、食べる前に食べ物を洗いませんが、人間は進化した動物なので、基本的な衛生状態には注意を払い(精神障害者を除く)、食事の前には体を洗い、必要なものがあると判断します。また、文化の違いにより、国ごとに食事の仕方も異なります。たとえば、インド人は手で直接食べますが、中国人は箸で食べ、西洋諸国ではフォークを使用する場合もあります。これは実生活でもよくあることですが、他の多くのことにも同じことが言えるので、ポリモーフィズムという現象もよくあり、私たちはオブジェクト指向プログラミングを使ってコードを書いているので、必然的に「ポリモーフィズム」に遭遇することになります。そして、コードを現実世界とより関連性のあるものにするために、「ポリモーフィズム」も使用する必要があります。

(4)、ポリモーフィズムの具体的な実装をマスターします。

要約:

1. ポリモーフィズムの定義は、各インターフェイスが複数の異なる実装を持つことができるということです

各要約は実践を通じて導き出されます。ここでは、実践を使用して要約を示します。これにより、理解が促進され、理解が促進されます。より明確かつ直感的に理解できるようになります。

(5)、具体的なコード

1、ケース 1

実用的な目標:

1. ポリモーフィズムの定義は、各インターフェイスが複数の異なる実装を持つことができるということです

<?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);
?>

実行結果は次のとおりです:

I am a cat. If I catch the Mouse I直接食べます
私は人間です。基本的な衛生状態に注意しなければならないので、食べる前に体を洗います

(6) 学んだことを応用します

質問: オブジェクト指向プログラミングの使用 この方法は、次の実際のシーンをシミュレートし、コードはポリモーフィズムの概念を反映する必要があります。

田舎の老人、シャオ リウは、5 羽の鶏と 5 匹の犬を飼っていました。毎朝、彼は時間どおり6時に起きて、お粥を調理し、お粥を食べた後、鶏とアヒルに餌を与えるために小さなバケツ2つの餌を運び、鶏小屋まで歩いて、そのうちの1つを注ぎます。バケツにご飯を入れて鶏小屋に入れ、犬小屋まで歩きます その隣で、彼は食べ残しの入った残りのバケツを犬小屋に注ぎました

アイデア分析:

1. オブジェクト分析: 中のオブジェクトは老人、ニワトリ、犬、食べ物なので、少なくとも次の 4 つのカテゴリがあります

#2. オブジェクトの属性分析: (現実世界の特定のシーンと組み合わせて)

老人: 名前


鶏: 番号

犬: 番号

食べ物: 名前

#3. オブジェクトメソッド分析: (現実世界の特定のシーン)

老人: 起きて、お粥を作り、食べる (お粥を食べる)、餌をやる


# 鶏: 食べる (ご飯をつついて食べる)

犬: 食べる (骨を食べる)

食べ物: 食べ物の名前を設定します


4. 上記の分析に基づいて、オブジェクトのうち 3 つには、食べますが、食べ方が違うので、このパブリックメソッドを抽出して、分離してインターフェースを作り、これら3つのクラスにそれぞれ実装させます

具体的な実装コードは次のとおりです。

<?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);//给小狗喂食

?>

実行結果は次のとおりです:


小流Get Up

小六がお粥を作りました
xiao liuがお粥を食べました

5羽の鶏が全員お粥を食べましたご飯
5匹の子犬はみんな残り物を食べました

# (7) まとめ
#1. この記事では主にポリモーフィズムの定義と機能、具体的な実装について説明します

この記事があなたのお役に立てれば幸いです、ありがとう! ! !

以上がPHPオブジェクト指向ポリモーフィズムの詳しい説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。