多态是除封装和继承之外的另一个面象对象的三大特性之一。
<?php
interface Shape
{
function area();
function perimeter();
}
//定义了一个矩形子类实现了形状接口中的周长和面积
class Rect implements Shape
{
private $width;
private $height;
function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
function area() {
return "矩形的面积是:" . ($this->width * $this->height);
}
function perimeter() {
return "矩形的周长是:" . (2 * ($this->width + $this->height));
}
}
//定义了一个圆形子类实现了形状接口中的周长和面积
class Circular implements Shape
{
private $radius;
function __construct($radius) {
$this->radius=$radius;
}
function area() {
return "圆形的面积是:" . (3.14 * $this->radius * $this->radius);
}
function perimeter() {
return "圆形的周长是:" . (2 * 3.14 * $this->radius);
}
}
//把子类矩形对象赋给形状的一个引用
$shape = new Rect(5, 10);
echo $shape->area() . "<br>";
echo $shape->perimeter() . "<br>";
//把子类圆形对象赋给形状的一个引用
$shape = new Circular(10);
echo $shape->area() . "<br>";
echo $shape->perimeter() . "<br>";*/
输出结果:
矩形的面积是:50
矩形的周长是:30
圆形的面积是:314
圆形的周长是:62.8
通过上例我们看到,把矩形对象和圆形对象分别赋给了变量$shape, 调用$shape引用中的面积和周长的方法,出现了不同的结果,这就是一种多态的 应用,其实在我们PHP这种弱类形的面向对象的语言里面,多态的特性并不是特别的明显,其实就是对象类型变量的变相引用。