使用面向对象的图形计算器,面向对象图形计算器这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性。本例的主要功能有:
效果如下:
思路:
需要改进的地方:
index.php代码如下:
1 2 3 4 5 6 7 图形周长面积计算器 8 9 矩形10 三角形11 圆形12
13 14 32
33 34
form.class.php代码如下:
1 formaction = $action; //把传入的参数保存到$formaction中;16 $this->shape = isset($_get[shape]) ? $_get[shape]:rect; //从表单传递的变量中获取图形类别,如没有传递,默认为矩形17 }18 function __tostring(){19 $form = 'formaction.'?shape='.$this->shape.' method=post>';20 //下面两行使用变量函数调用对应图形的私有函数,返回input部分表单的字符串21 $shape = 'get'.ucfirst($this->shape);22 $form .= $this->$shape();23 24 $form .= '';25 $form .= '';26 27 return $form;28 }29 //私有方法,返回矩形表单input部分的字符串;30 private function getrect(){31 //在表单提交后输入的内容继续显示,防止其消失32 $formheight=isset($_post['height']) ? $_post['height'] : null;33 $formwidth=isset($_post['width']) ? $_post['width'] : null;34 $input = '请输入矩形的长和宽
';35 $input .= '矩形的高度:
';36 $input .= '矩形的宽度:';37 return $input;38 }39 //返回三角形输入表单input部分的字符串40 private function gettriangle(){41 //在表单提交后继续显示出来,防止其消失42 $formside1=isset($_post['side1']) ? $_post['side1'] : null;43 $formside2=isset($_post['side2']) ? $_post['side2'] : null;44 $formside3=isset($_post['side3']) ? $_post['side3'] : null;45 $input = '请输入三角形的三边
';46 $input .= '边长1:';47 $input .= '边长2:';48 $input .= '边长3:';49 return $input;50 }51 //返回圆形表单input部分的字符串52 private function getcircle(){53 $formradius=isset($_post['radius']) ? $_post['radius'] : null; //在输入表单提交后内容继续显示出来,防止其消失54 $input = '请输入半径
';55 $input .= '半径:';56 return $input;57 }58 }59
result.class.php代码如下:
1 shape = new $_get[shape](); 8 } 9 //调用对象的属性和方法,返回周长和面积10 function __tostring(){11 $result = $this->shape->shapename.'的周长为'.$this->shape->perimeter().'';12 $result .= $this->shape->shapename.'的面积为'.$this->shape->area().'';13 return $result;14 }15 }
抽象类shape.class.php代码如下:
1 validate($_post[side1],边长1) & $this->validate($_post[side2],边长2) & $this->validate($_post[side3],边长3)){20 21 //使用私有方法验证两边和是否大于第三边22 if($this->validatesum($_post[side1],$_post[side2],$_post[side3])){23 $this->side1 = $_post[side1]; //若通过验证初始化三边;24 $this->side2 = $_post[side2];25 $this->side3 = $_post[side3];26 }27 else{28 echo '两边的和要大于第三边';29 exit();30 }31 }32 else{33 exit();34 }35 }36 /*使用海伦公式计算面积,并返回结果*/37 function area(){38 $s = ($_post[side1] + $_post[side2] + $_post[side3])/2;39 return sqrt($s * ($s - $_post[side1]) * ($s - $_post[side2]) * ($s - $_post[side3]));40 }41 /*计算并返回周长*/42 function perimeter(){43 return $_post[side1] + $_post[side2] + $_post[side3];44 }45 /*计算三角形两边和是否大于第三边,是返回true,否返回false*/46 private function validatesum($side1,$side2,$side3){47 if(($side1 + $side2) > $side3 && ($side1 + $side3) > $side2 && ($side2 + $side3) > $side1)48 return true;49 else50 return false;51 }52 }
子类circle.class.php代码如下:
1 shapename = 圆形;13 if($this->validate($_post[radius],半径))14 $this->radius = $_post[radius];15 }16 //返回圆的面积17 function area(){18 return 3.14 * $this->radius * $this->radius;19 }20 //返回圆的周长21 function perimeter(){22 return 3.14 * 2 * $this->radius;23 }24 }
子类rect.class.php代码如下:
1 shapename = 矩形;14 if($this->validate($_post[width],宽度) && $this->validate($_post[height],高度)){15 $this->width = $_post[width];16 $this->height = $_post[height];17 }18 }19 //返回面积20 function area(){21 return $this->width * $this->height;22 }23 //返回周长24 function perimeter(){25 return 2 * ($this->width + $this->height);26 }27 }
声明:
1.本文只适合实验,不适合现实应用,若造成不良后果,本人概不负责。
2.本文为原创博客,可以在个人平台自由转载,但需要注明出处,附上链接,否则视为盗用。严禁用于商业用途,如有需要,联系本人支付稿费,授权后方能使用。
http://www.bkjia.com/phpjc/1017048.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1017048.htmltecharticle使用面向对象的图形计算器,面向对象图形计算器 这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性。...