刚刚学完php面向对象的编程,参考着高洛峰老师的php教程学习了这个实例。
效果图片:
以下是实现代码:index.php<html><head>
<title>图形计算(使用面向对象开发技术)</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body>
<center>
<h1>图形(周长&面积) 计算器</h1>
<a href="index.php?action=rect">矩形</a>
<a href="index.php?action=triangle">三角形</a>
<a href="index.php?action=circle">圆形</a>
<hr>
</center>
<?php //php代码部分
error_reporting(e_all & ~e_notice);//提示错误的等级
// __autoload是php中的魔术方法,在用到类的时候自动调用
function __autoload($classname){
//自动导入这个类
include strtolower($classname).".class.php";
}
//输出表单,form类中有魔术方法__tostring,因此可以直接输出类的对象引用,就是输出对象返回的字符串
echo new form();
if(isset($_post["sub"])){
//输出结果
echo new result();//直接输出对象的引用表示
}
?></body></html>
form.class.php_这是表单类_<?php
//根据index中提交的不同action的值返回不同的表单
class form{
private $action; private $shape; //构造方法
function __construct($action=""){
$this->action = $action; $this->shape=isset($_request["action"])?$_request["action"]:"rect";
} function __tostring()
{
// todo: implement __tostring() method.
$form='<form action="'.$this->action.'" method="post">'; switch($this->shape){ case "rect": $form.=$this->getrect(); break; case "triangle": $form.=$this->gettriangle(); break; case "circle": $form.=$this->getcircle(); break; default: $form.='请选择一个形状<br>';
} $form.='<input type="submit" name="sub" value="计算">'; $form.='</form>'; return $form;
} private function getrect(){
$input='<b>请输入 | 矩形 | 的宽度和高度:</b><p>'; $input.='宽度:<input type="text" name="width" value="'.$_post['width'].'"><br>'; $input.='高度:<input type="text" name="height" value="'.$_post['height'].'"><br>'; $input.='<input type="hidden" name="action" value="rect">'; return $input;
} private function gettriangle(){
$input='<b>请输入 | 三角形 | 的三条边:</b><p>'; $input.='第一边: <input type="text" name="side1" value="'.$_post['side1'].'" ><br>'; $input.='第二边: <input type="text" name="side2" value="'.$_post['side2'].'" ><br>'; $input.='第三边: <input type="text" name="side3" value="'.$_post['side3'].'" ><br>'; $input.='<input type="hidden" name="action" value="triangle">'; return $input;
} private function getcircle(){
$input='<b>请输入 | 圆形 | 的半径:</b><p>'; $input.='半径: <input type="text" name="radius" value="'.$_post['radius'].'" ><br>'; $input.='<input type="hidden" name="action" value="circle">'; return $input;
}
}/**
* created by phpstorm.
* user: user
* date: 2018/4/15
* time: 16:26
*
*/
shape.class.php 这是一个抽象类,用来定义规范的<?phpabstract class shape {
public $shapename; //规范circle、triangle、rect中必须有area()、perimeter()方法
abstract function area();
abstract function perimeter();
public function setshapename($shapename)
{
$this->shapename = $shapename; return $this;
} //判断输入的数字是否为大于0的有效数字
protected function validate($value, $message="形状"){
if($value == "" || !is_numeric($value) || $value < 0 ){ echo '<font color="red"> '.$message.' 必须为非负值的数字,并且不能为空 </font><br>'; return false;
} else { return true;
}
}
}/**
* created by phpstorm.
* user: user
* date: 2018/4/15
* time: 16:42
*/
circle.class.php_就是计算周长和面积的公式了_<?phpclass circle extends shape {
private $radius=0; function __construct(){
$this->shapename="圆形"; if($this->validate($_post['radius'], '圆的半径')){ $this->radius=$_post["radius"];
}else{ exit;
}
} function area(){
return pi()*$this->radius*$this->radius;
} function perimeter(){
return 2*pi()*$this->radius;
}
}/**
* created by phpstorm.
* user: user
* date: 2018/4/15
* time: 17:06
*/
rect.class.php<?phpclass rect extends shape{
private $width=0; private $height=0; function __construct()
{
$this->shapename="矩形"; if($this->validate($_post["width"],'矩形的宽度') & $this->validate($_post["height"],'矩形的高度'))
{ $this->width=$_post["width"]; $this->height=$_post["height"];
} else{ exit;
}
} function area(){
return $this->width*$this->height;
} function perimeter()
{
return 2 * ($this->width + $this->height);
}
}/**
* created by phpstorm.
* user: user
* date: 2018/4/15
* time: 17:02
*/
triangle.class.php<?phpclass triangle extends shape{
private $side1=0; private $side2=0; private $side3=0; function __construct(){
$this->shapename="三角形"; if($this->validate($_post['side1'], '三角形的第一个边')){ $this->side1=$_post["side1"];
} if($this->validate($_post['side2'], '三角形的第二个边')){ $this->side2=$_post["side2"];
} if($this->validate($_post['side3'], '三角形的第三个边')){ $this->side3=$_post["side3"];
} if(!$this->validatesum()){ echo '<font color="red">三角形的两边之和必须大于第三边</font>'; exit;
}
} function area(){
$s=( $this->side1+$this->side2+$this->side3 )/2; return sqrt( $s * ($s - $this->side1) * ($s - $this->side2) * ($s - $this->side3) );
} function perimeter(){
return $this->side1+$this->side2+$this->side3;
} private function validatesum()
{
$condition1 = ($this->side1 + $this->side2) > $this->side3; $condition2 = ($this->side1 + $this->side3) > $this->side2; $condition3 = ($this->side2 + $this->side3) > $this->side1; if ($condition1 && $condition2 && $condition3) { return true;
} else { return false;
}
}
}/**
* created by phpstorm.
* user: user
* date: 2018/4/15
* time: 17:04
*/
result.class.php_这里是返回计算结果类_<?php
class result{ private $shape;
function __construct()
{ switch($_post['action']){ case 'rect':
$this->shape=new rect(); break; case 'triangle':
$this->shape=new triangle(); break; case 'circle':
$this->shape=new circle(); break; default:
$this->shape=false;
}
} /**
* @return string
*/
function __tostring()
{ // todo: implement __tostring() method.
if($this->shape){
$result=$this->shape->shapename.'的周长:'.$this->shape->perimeter().'<br>';
$result.=$this->shape->shapename.'的面积:'.$this->shape->area().'<br>'; return $result;
}else{ return '没有这个形状';
}
}
}/**
* created by phpstorm.
* user: user
* date: 2018/4/15
* time: 16:47
*/
相关推荐:
php面向对象 静态延迟绑定static::
以上就是php面向对象编程练习:计算矩形、三角形、圆形的周长和面积 的详细内容。