Menu
CoddyTech

回顾:形状计算器

本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 32 课,共 91 课。

challenge icon

挑战

简单

让我们构建一个形状计算器,展示接口如何帮助你编写灵活且易于扩展的代码。你将创建一个接口,定义计算面积的契约,然后在不同的形状类中实现它。

你将把代码分配到 4 个文件中:

  • Calculable.php:定义一个 Calculable 接口,其中包含一个方法签名:calculateArea()。这个契约确保任何可计算的形状都能计算自己的面积。
  • Rectangle.php:创建一个实现 Calculable 的 Rectangle 类。引入接口文件。这个类应包含私有属性 $width 和 $height,并通过构造函数设置它们。实现 calculateArea(),使其返回面积(宽乘以高)。
  • Circle.php:创建一个同样实现 Calculable 的 Circle 类。引入接口文件。这个类应包含一个私有属性 $radius,并通过构造函数设置它。实现 calculateArea(),使其使用公式 pi() * radius * radius 返回面积。
  • main.php:引入这两个形状文件。创建一个名为 displayArea 的函数,它接受一个 Calculable 参数和一个形状名称(字符串)。函数应打印:"[name] area: [area]",其中面积使用 number_format() 四舍五入到小数点后 2 位。

你将收到 4 个输入:矩形的宽、矩形的高、圆的半径,以及圆的形状名称。创建一个宽和高分别为对应输入(转换为浮点数)的 Rectangle,再创建一个半径为对应输入(转换为浮点数)的 Circle。调用两次 displayArea():先传入矩形,并将 "Rectangle" 作为名称;然后传入圆,并使用提供的形状名称。将每个结果单独打印在一行上。

displayArea() 函数适用于任何实现了 Calculable 的形状。它不需要知道自己计算的是矩形、圆还是你将来可能添加的其他形状的面积。这就是面向接口编程的妙处!

亲手试试

<?php
// 引入形状文件
require_once 'Rectangle.php';
require_once 'Circle.php';

// TODO: 创建一个名为 displayArea 的函数
// 该函数应接收一个 Calculable 参数和一个形状名称(字符串)
// 打印:"[name] area: [area]",其中 area 使用 number_format() 保留 2 位小数

// 读取输入
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));

// TODO: 用宽度和高度创建一个 Rectangle

// TODO: 用半径创建一个 Circle

// TODO: 调用 displayArea(),传入矩形,并使用 "Rectangle" 作为名称

// TODO: 调用 displayArea(),传入圆形,并使用提供的形状名称
?>

面向对象编程中的所有课

自己练习: PHP 在线编译器