PHP7是否支持多态?

时间:2016-04-27 06:54:49

标签: php php-7

我一直在使用5.6,但动态输入有一些实际限制。我刚刚查看了PHP7的文档,看起来它们正在削减困扰旧版本的问题,现在看来它们实际上是设计语言。

我看到它支持对参数的类型提示,这是否意味着我们实际上可以拥有多态函数?

另一个问题,与切向相关,但PHP7的当前版本是稳定版本吗?

1 个答案:

答案 0 :(得分:3)

关于关于函数参数类型提示的问题,答案是“是”,PHP在这方面支持多态。

我们可以采用带有矩形和三角形的典型形状示例。让我们首先定义这三个类:

形状类

setUp

矩形类

class Shape {
    public function getName()
    {
        return "Shape";
    }

    public function getArea()
    {
        // To be overridden
    }
}

三角课

class Rectangle extends Shape {

    private $width;
    private $length;

    public function __construct(float $width, float $length)
    {
        $this->width = $width;
        $this->length = $length;
    }

    public function getName()
    {
        return "Rectangle";
    }


    public function getArea()
    {
        return $this->width * $this->length;
    }
}

现在我们可以编写一个采用上述Shape类的函数。

class Triangle extends Shape {

    private $base;
    private $height;

    public function __construct(float $base, float $height)
    {
        $this->base = $base;
        $this->height = $height;
    }

    public function getName()
    {
        return "Triangle";
    }

    public function getArea()
    {
        return $this->base * $this->height * 0.5;
    }
}

示例运行会产生以下结果:

function printArea(Shape $shape)
{
    echo "The area of `{$shape->getName()}` is {$shape->getArea()}" . PHP_EOL;
}

$shapes = [];
$shapes[] = new Rectangle(10.0, 10.0);
$shapes[] = new Triangle(10.0, 10.0);

foreach ($shapes as $shape) {
    printArea($shape);
}

关于PHP7稳定性的第二个问题:是的,PHP7很稳定并且被许多公司用于生产。