矩形的计算
考虑到图形有很多种,我们可以先建一个图形抽象类,提供所有图形公共的属性和方法,
这样其他图形可以直接继承他,减少了代码的冗余,符合面向对象的思想
1,新建Shap.class.php文件
图形的名称$name,错误信息$error,周长area()和面积zhou(),以及每次计算之后都有个验证yan()
<?php
abstract class Shape {
private $name;
private $error;
abstract function area();
abstract function zhou();
abstract function view($arr);
abstract function yan($arr);
}
?>2,新建Rect.class.php文件
新建矩形类之后继承图形类,实现对应的方法,每种图形除了继承的属性和方法外还有自己独特的属性和方法,例如矩形就有长和宽,球体就有球半径等
定义矩形的属性$width和$height
使用构造函数使其进行实例化是自动给name和error赋值
分别进行面积和周长的计算
点击矩形之后需要显示输入框,这时只需要定义给一个方法view()来打印出输入框即可
给矩形按钮加一个a标签
<a href='index.php?action=rect'>矩形</a> |
点击之后进行get请求,并把view里打印的输入框展示出来,代码如下:
<?php
if (!empty($_GET['action'])) {
$shape = new Rect();
$shape->view();
}<?php
class Rect extends Shape {
private $width;
private $height;
function __construct() {
$this->name = "矩形";
$this->error = '';
}
function area() {
return $this->width * $this->height;
}
function zhou() {
return ($this->width+$this->height) * 2;
}
function view($arr) {
$form='';
$form .= "<form action='index.php?action=rect' method='post'>";
$form .= "请输入".$arr['name']."的宽度:<input type='text' name='width' value='".$_POST['width']."'/><br>";
$form .= "<br>";
$form .= "请输入".$arr['name']."的长度:<input type='text' name='height' value='".$_POST['height']."'/><br>";
$form .= "<br>";
$form .= "<input type='submit' name='sub' value='提交'/> ";
$form .= "<input type='reset' name='ret' value='重置'/>";
$form .= "</form>";
echo $form;
}
}
?>3,验证信息的打印
矩形类里新加方法:
<?php
function yan($arr) {
$bz = true;
if ($arr['width']< 0) {
$this->error .= "宽度小于0;";
$bz = false;
} else {
if (!is_numeric($arr['width'])) {
$this->error .= "宽不是数字;";
$bz = false;
}
}
if ($arr['height']< 0) {
$this->error .= "宽度小于0;";
$bz = false;
} else {
if (!is_numeric($arr['height'])) {
$this->error .= "高不是数字;";
$bz = false;
}
}
return $bz;
}打印验证信息,index.php代码:
if (!$shape->yan($_POST)) {
echo "<b>错误:$shape->error</b>";
}
echo "</div>";如果验证信息正确则打印正确的周长和面积:
<?php
echo "<div id='footer'>";
if ($shape->yan($_POST)) {
echo "<b>".$shape->name."的周长".$shape->zhou()."</b>"."<br>";
echo "<br>";
echo "<b>".$shape->name."的面积".$shape->area()."</b>"."<br>";
}else {
echo "<b>错误:$shape->error</b>";
}
echo "</div>";运行结果:

思考:在index.php里需要引入Rect.class.php文件,require 'Rect.class.php';
计算其他图形时也需要引入,有没有什么办法可以一次性引进所有的类文件?(下一节介绍)
