您的位置:首页 > 编程语言 > PHP开发

PHP 对象 多态性 简单图形计算器 高洛峰 细说PHP

2016-09-01 16:46 531 查看
主程序页面 test.php页面
<!DOCTYPE html>
<html>
<head>
<title>简单的图形计算器</title>
<meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" />
</head>
<body>
<center>
<h1>简单的图形计算器</h1>
<a href = "test.php?action=rectangle">矩形</a>   ||   
<a href = "test.php?action=triangle">三角形</a>
</center>
<br/><hr>
<?php
//屏蔽E_NOTICE提示
error_reporting(E_ALL & ~E_NOTICE);
//设置自动加载这个程序需要的类文件
function __autoload($classname){
include $classname.'.class.php';
}
//判断用户是否单击一个形状链接
if(!empty($_GET['action'])){
//第一步:创建形状的对象
$classname = ucfirst($_GET['action']);
$shape = new $classname($_POST);
//第二步:调用形状的对象中的图形界面
$shape->view();
//第三步:用户是否提交了对应的图形界面的表单
if(isset($_POST['dosubmit'])){
//第四步:查看用户输入的数据是否合法,不合法则提示
if($shape->validate($_POST)){
//第五步:计算图形的面积和周长
echo $shape->name.'的面积为:'.$shape->area().'<br/>';
echo $shape->name.'的周长为:'.$shape->circumference().'<br/>';
}
}
}else{//如果用户没有单击则默认访问主程序
echo '请选择一个要计算的图形';
}
?>
</body>
</html>
形状抽象类Shape.class.php页面
<?php
//形状抽象类
abstract class Shape{
public  $name;
//面积
abstract function area();
//周长
abstract function circumference();
//图形界面
abstract function view();
//形状验证方法
abstract function validate($arr);

}
矩形类Rectangle.class.php页面
<?php
//矩形类
class Rectangle extends Shape{
private $width;
private $height;
function __construct($arr=array()){
if(!empty($arr)){
$this->width   =  $arr['width'];
$this->height  =  $arr['height'];
}
$this->name   =  '矩形';
}
function area(){
return $this->width*$this->height;
}
//周长
function circumference(){
return 2*($this->width+$this->height);
}
//图形界面
function view(){
$form =  '<form action="test.php?action=rectangle" method="post">';
$form .= $this->name.'的宽:<input type="text" name="width" value="'.$_POST['width'].'" /> <br/>';
$form .= $this->name.'的高:<input type="text" name="height" value="'.$_POST['height'].'" /> <br/>';
$form .= '<input type="submit" name="dosubmit" value="计算" /> <br/>';
$form .= '</form>';
echo $form;
}
//形状验证方法
function validate($arr){
$flag = true;
if($arr['width']<0 || !is_numeric($arr['width'])){
echo $this->name.'的宽必须是大于0的整数<br/>';
$flag = false;
}
if($arr['height']<0 || !is_numeric($arr['height'])){
echo $this->name.'的高必须是大于0的整数<br/>';
$flag = false;
}
return $flag;
}

}
三角形类Triangle.class.php页面
<?php
//三角形类
class Triangle extends Shape{
private $edge1;
private $edge2;
private $edge3;

function __construct($arr=array()){
if(!empty($arr)){
$this->edge1   =  $arr['edge1'];
$this->edge2   =  $arr['edge2'];
$this->edge3   =  $arr['edge3'];
}
$this->name   =  '三角形';
}
function area(){
$p =($this->edge1+$this->edge2+$this->edge3)/2;
return sqrt($p*($p-$this->edge1)*($p-$this->edge2)*($p-$this->edge3));
}
//周长
function circumference(){
return ($this->edge1+$this->edge2+$this->edge3);
}
//图形界面
function view(){
$form =  '<form action="test.php?action=triangle" method="post">';
$form .= $this->name.'的第一个边:<input type="text" name="edge1" value="'.$_POST['edge1'].'" /> <br/>';
$form .= $this->name.'的第二个边:<input type="text" name="edge2" value="'.$_POST['edge2'].'" /> <br/>';
$form .= $this->name.'的第三个边:<input type="text" name="edge3" value="'.$_POST['edge3'].'" /> <br/>';
$form .= '<input type="submit" name="dosubmit" value="计算" /> <br/>';
$form .= '</form>';
echo $form;
}
//形状验证方法
function validate($arr){
$flag = true;
if($arr['edge1']<0 || !is_numeric($arr['edge1'])){
echo $this->name.'的第一边必须是大于0的整数<br/>';
$flag = false;
}
if($arr['edge2']<0 || !is_numeric($arr['edge2'])){
echo $this->name.'的第二边必须是大于0的整数<br/>';
$flag = false;
}
if($arr['edge3']<0 || !is_numeric($arr['edge3'])){
echo $this->name.'的第三边必须是大于0的整数<br/>';
$flag = false;
}
if(($arr['edge1']+$arr['edge2']<$arr['edge3']) || ($arr['edge1']+$arr['edge3']<$arr['edge2'])||($arr['edge3']+$arr['edge2']<$arr['edge1']) ){
echo '三角形定义必须两边之和大于第三边<br/>';
$flag = false;
}
return $flag;
}

}
浏览器 矩形页面



浏览器 三角形页面


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP 对象 多态性