首页后端开发PHPPHP面向对象之多态详解(代码实例)

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

时间2024-02-02 03:46:02发布访客分类PHP浏览342
导读:收集整理的这篇文章主要介绍了PHP面向对象之多态详解(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。本文目标:1、了解多态的定义2、了解多态的作用3、了解多态的使用场景4、掌握多态的具体实现还是按照之前一贯的思路,我们通过3W...
收集整理的这篇文章主要介绍了PHP面向对象之多态详解(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。

本文目标:

1、了解多态的定义

2、了解多态的作用

3、了解多态的使用场景

4、掌握多态的具体实现

还是按照之前一贯的思路,我们通过3W1H的方式进行学习,那么首先我们来了解一下

(一)、了解多态的定义

因为接口的方法实现可以有很多,所以对于接口里面定义的方法的具体实现是多种多样的,这种特性我们称作“多态

-比如接口A有2个实现B和C,B和C对A里面定义的方法可以是不同的,这种现象就是多态

(二)、了解多态的作用

作用就是可以让一个接口可以有不同的实现,这样使得代码更加贴合于真实世界,这样的方式拉近了代码和真实世界的距离,从而让开发者们能更加方便地去实现实现中的一些复杂的业务逻辑

(三)、了解多态的使用场景

其实这个使用场景,在我们一旦决定用接口的时候,这种现象就会出现,因为一旦一个接口有不同的实现类的时候,基本上这种现象就会发生,因为很多时候我们希望一个接口里面的某个或者多个方法,可以有不同的具体实现

-比如吃的方法,每个动物有每个动物的吃法,老鼠和猫都是直接吃,不会去考虑讲不讲究卫生,所以不会去把食物先洗一下再吃,但是人呢,是高级动物,所以都会讲究基本的卫生(神经病的除外),会去洗一下再吃,而且还会判断有些东西必须要煮熟了再吃,而且因为文化的差异,每个国家的人的吃法也不同,比如印度人直接用手吃,而中国人是用筷子吃,而西方有些国家则是用叉子,吃有不同的吃法,这在现实生活里是非常常见的,那还有很多事情也都是如此,所以多态的这种现象也是非常普遍,而我们写代码是使用面向对象编程的方式写,所以难免也会遇到“多态”,而且为了让我们的代码更加贴合真实世界,我们也必须使用“多态”

(四)、掌握多态的具体实现

总结:

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

运行结果为:

我是猫,抓到喜欢的老鼠,直接吃
我是人,吃东西之前,都会洗一下再吃,因为我要讲究基本的卫生

(六)、学以致用

问题:用面向对象的编程方式模拟出以下真实的场景,代码要能体现出多态的概念

一个农村老人小刘,养了5鸡,和5只狗,每天早上,他都会6点准时起床,煮稀饭,吃完稀饭后,然后他会提着2小桶食物去给鸡和鸭喂食,走到鸡栏边,它把其中的一桶米倒入鸡食槽里,走到狗窝旁,又把剩下的装有残羹剩菜的一桶食物倒入狗狗吃的食槽里

思路分析:

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

运行结果为:

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

(七)、总结

1、本文主要是讲了多态的定义和作用,以及具体的实现

希望本文能给大家带来一定的帮助,谢谢!!!

以上就是PHP面向对象之多态详解(代码实例)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP面向对象之多态详解(代码实例)
本文地址: https://pptw.com/jishu/596318.html
深入理解依赖注入是如何实现解耦 PHP时间戳和日期格式相互转换

游客 回复需填写必要信息