PHP面向对象之多态

MengDe 153 2021-08-12

何为面向对象之多态,且听我细细道来。

在PHP开发中,可能对于多态的了解不是很深,但是JAVA不一样,下面是案例,代码注释仔细的讲解了何为多态。

<?php
/**
 * @author MengDe <9258405@qq.com>
 * @date   2021/8/12 15:42
 *
 */
//场景:两种动物 一种是猪 一种是鸟,需求是看他们能不能飞起来
//一般的 我们将有两个类(猪和鸟),他们都有两个共同的方法 就是飞

//定义一个抽象类 动物 用于动物继承
abstract class Animal
{
    public abstract function fly();
}

/**
 * Class Pig
 * @author MengDe <9258405@qq.com>
 * @date   2021/8/12 15:48
 * 猪类
 */
class Pig extends Animal
{
    public function fly()
    {
        echo "猪飞不起来";
    }
}

/**
 * Class Bird
 * @author MengDe <9258405@qq.com>
 * @date   2021/8/12 15:48
 * 鸟类
 */
class Bird extends Animal
{
    public function fly()
    {
        echo "鸟飞起来了";
    }
}

//一般的 我们在PHP中 我们如何调用?
class Zoon
{
    /**
     * @param $zoon
     * @return mixed
     * @author MengDe <9258405@qq.com>
     * @date   2021/8/12 15:51
     * 调用方法
     * 一般的PHP是弱类型语言 我们这个$zoon可以传入猪 也可以传入鸟 他都能够使用
     * 但是在强类型 例如go 例如java中 必须指定你传入的到底是猪还是鸟 不然将会报错
     */
    public function call($zoon)
    {
        return $zoon->fly();
    }
}

//PHP写法
$zoon = new Zoon();
$zoon->call(new Bird()); //输出:鸟飞起来了
$zoon->call(new Pig());  //输出:猪飞不起来
//在这里  就算我们使用人 也是能够调用的
class People
{
    public function fly()
    {
        echo "人飞起来了";
    }
}

$zoon->call(new People());  //输出:人飞起来了
//当我们给他加入强制类型的时候 他将会无法运行报错
echo "</br>";

//Java
class Zoon1
{
    /**
     * @param Bird $zoon
     * @author MengDe <9258405@qq.com>
     * @date   2021/8/12 15:55
     * 强制他必须使用的是动物的抽象类
     */
    public function call(Animal $zoon)
    {
        return $zoon->fly();
    }
}

//在这里我们调用
$zoon1 = new Zoon1();
$zoon1->call(new Bird()); //输出:鸟飞起来了
$zoon1->call(new Pig());  //输出:猪飞不起来
$zoon1->call(new People()); //此处报错


PHP面向对象之多态  php 面向对象 面向对象多态 php高级之面向对象 第1张

在PHP开发中:

我们其实根本就不会去关注他传入的是什么,所以对于多态并没有多关注

但是在强类型语言中,传入什么都是有限制的 如果我们在开发的过程中 调用一个类就重写一个类 这就很麻烦,所以 最好的办法 定义一个公共抽象类 ,在传入参数的时候, 可以传入不同的抽象类的子类,这样就是多态


上一篇:Vagrant虚拟机占用C盘位置导致C盘爆了
下一篇:PHP面向对象之面向接口开发
相关文章