刚刚学完php面向对象的编程,参考着高洛峰老师的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>
<?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 * */
<?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 */
<?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 */
<?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 */
<?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 */
<?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面向对象编程练习:计算矩形、三角形、圆形的周长和面积 的详细内容。更多信息请关注PHP中文网其他相关文章!