PHP面向对象-类和对象的定义(五)

2023-04-27 17:06:48 浏览数 (1)

5. 多态

多态是面向对象编程中的另一个重要特性,它可以让不同的对象使用相同的方法,但是表现出不同的行为。在PHP中,多态可以通过接口和抽象类来实现。

接口是一种定义规范的抽象类型,它只包含方法的声明,不包含实现。类可以实现一个或多个接口,必须实现接口中声明的所有方法。接口的语法如下:

代码语言:javascript复制
interface 接口名 {
  // 方法声明
}

下面是一个接口的示例:

代码语言:javascript复制
interface Shape {
  public function getArea();
  public function getPerimeter();
}

在这个示例中,我们定义了一个名为Shape的接口,它包含了两个方法getArea()和getPerimeter(),分别用于计算形状的面积和周长。

抽象类是一种包含抽象方法的类,抽象方法只包含方法的声明,不包含实现。子类必须实现抽象类中的所有抽象方法,才能被实例化。抽象类的语法如下:

代码语言:javascript复制
abstract class 抽象类名 {
  // 抽象方法
}

下面是一个抽象类的示例:

代码语言:javascript复制
abstract class Animal {
  protected $name; // 动物名称
  
  public function __construct($name) {
    $this->name = $name;
  }
  
  abstract public function makeSound(); // 抽象方法
}

在这个示例中,我们定义了一个名为Animal的抽象类,它包含了一个属性$name和一个构造函数__construct(),以及一个抽象方法makeSound()。子类必须实现makeSound()方法,才能被实例化。

下面是一个多态的示例:

代码语言:javascript复制
class Circle implements Shape {
  private $radius; // 圆半径
  
  public function __construct($radius) {
    $this->radius = $radius;
  }
  
  public function getArea() {
    return pi() * $this->radius * $this->radius;
  }
  
  public function getPerimeter() {
    return 2 * pi() * $this->radius;
  }
}

class Rectangle implements Shape {
  private $width; // 矩形宽度
  private $height; // 矩形高度
  
  public function __construct($width, $height) {
    $this->width = $width;
    $this->height = $height;
  }
  
  public function getArea() {
    return $this->width * $this->height;
  }
  
  public function getPerimeter() {
    return 2 * ($this->width   $this->height);
  }
}

function printShapeInfo(Shape $shape) {
  echo 'Area: ' . $shape->getArea() . '<br>';
  echo 'Perimeter: ' . $shape->getPerimeter() . '<br>';
}

$circle = new Circle(5);
$rectangle = new Rectangle(3, 4);

printShapeInfo($circle);
printShapeInfo($rectangle);

在这个示例中,我们创建了一个Circle类和一个Rectangle类,它们都实现了Shape接口。我们还定义了一个函数printShapeInfo(),用于打印形状的面积和周长。在主程序中,我们创建了一个圆形和一个矩形,并分别调用了printShapeInfo()函数,输出了它们的面积和周长。

php

0 人点赞