PHP面向对象之多态详解(代码实例)-php教程

资源魔 30 0

本文指标:

一、理解多态的界说

二、理解多态的作用

三、理解多态的应用场景

四、把握多态的详细完成

仍是依照以前一向的思绪,咱们经过3W1H的形式进行学习,那末起首咱们来理解一下

(一)、理解多态的界说

由于接口的办法完成能够有不少,以是关于接口外面界说的办法的详细完成是多种多样的,这类特点咱们称作“多态

-比方接口A有2个完成B以及C,B以及C对A外面界说的办法能够是没有同的,这类景象就是多态

(二)、理解多态的作用

作用就是能够让一个接口能够有没有同的完成,这样使患上代码愈加贴合于实在世界,这样的形式拉近了代码以及实在世界的间隔,从而闪开发者们能愈加不便地去完成完成中的一些复杂的营业逻辑

(三)、理解多态的应用场景

其实这个应用场景,正在咱们一旦决议用接口的时分,这类景象就会呈现,由于一旦一个接口有没有同的完成类的时分,根本上这类景象就会发作,由于不少时分咱们心愿一个接口外面的某个或许多个办法,能够有没有同的详细完成

-比方吃的办法,每一个植物有每一个植物的服法,老鼠以及猫都是间接吃,没有会去思考讲没有考究卫生,以是没有会去把食品先洗一下再吃,然而人呢,是初级植物,以是城市考究根本的卫生(精神病的除了外),会去洗一下再吃,并且还会判别有些货色必需要煮熟了再吃,并且由于文明的差别,每一个国度的人的服法也没有同,比方印度人间接用手吃,而中国人是用筷子吃,而东方有些国度则是用叉子,吃有没有同的服法,这正在事实生存里长短经常见的,那另有不少事件也都是如斯,以是多态的这类景象也长短常普遍,而咱们写代码是应用面向工具编程的形式写,以是难免也会遇到“多态”,并且为了让咱们的代码愈加贴合实在世界,咱们也必需应用“多态”

(四)、把握多态的详细完成

总结:

一、多态的界说就是每一个接口能够有多个没有同的完成

每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观

(五)、详细代码

一、案例一

理论指标:

一、多态的界说就是每一个接口能够有多个没有同的完成

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

运转后果为:

我是猫,抓到喜爱的老鼠,间接吃
我是人,吃货色以前,城市洗一下再吃,由于我要考究根本的卫生

(六)、学致使用

成绩:用面向工具的编程形式模仿出如下实在的场景,代码要能表现出多态的概念

一个乡村白叟小刘,养了5鸡,以及5只狗,天天早上,他城市6点准时起床,煮稀饭,吃完稀饭后,而后他会提着2小桶食品去给鸡以及鸭喂食,走到鸡栏边,它把此中的一桶米倒入鸡食槽里,走到狗窝旁,又把剩下的装有残羹剩菜的一桶食品倒入狗狗吃的食槽里

思绪剖析:

一、工具剖析:外面的工具有白叟,鸡,狗,食品 以是至多有这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);//给小狗喂食

?>

运转后果为:

小刘起床了
小刘煮稀饭了
小刘吃了稀饭
5只小鸡们,都吃了米
5只小狗们,都吃了残羹剩饭

(七)、总结

一、本文次要是讲了多态的界说以及作用,和详细的完成

心愿本文能给各人带来肯定的协助,谢谢!!!

以上就是PHP面向工具之多态详解(代码实例)的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 面向对象

抱歉,评论功能暂时关闭!