回顾:形状计算器
本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 32 课,共 91 课。
挑战
简单让我们构建一个形状计算器,展示接口如何帮助你编写灵活且易于扩展的代码。你将创建一个接口,定义计算面积的契约,然后在不同的形状类中实现它。
你将把代码分配到 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 在线编译器