欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

使用面向对象的图形计算器,面向对象图形计算器

程序员文章站 2022-04-09 11:09:44
...

使用面向对象的图形计算器,面向对象图形计算器

这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性。本例的主要功能有:

效果如下:

思路:

需要改进的地方:

index.php代码如下:

 1 
 2  3          4 
 5 
 6         
7

图形周长面积计算器

8 9 矩形 10 三角形 11 圆形 12
13
14 php 15 /*自动加载类*/ 16 function __autoload($className){ 17 include (strtolower($className).'.class.php'); 18 } 19 20 /* 21 1.先new一个Form对象,发现没有form类的定义,把类名Form传递到自动加载类的函数参数进行类的自动加载。 22 2.echo一个对象的引用,会调用该对象的__toString方法返回一个字符串,echo输出的就是对象返回的字符串, 23 这里输出一个表单等待用户的输入。 24 */ 25 echo new Form("index.php"); 26 27 /*如果用户点击了提交按钮,自动加载result类,输出结果*/ 28 if(isset($_POST["sub"])){ 29 echo new result(); 30 } 31 ?> 32
33 34

form.class.php代码如下:

 1 php
 2         /*
 3         project:面向对象版图形计算器
 4         file:form.class.php
 5         description:对不同的图形输出不同的表单
 6         */
 7         class form{
 8                 private $formAction=NULL;       //保存响应表单的文件
 9                 private $shape=NULL;            //保存图形的形状
10 
11                 /*
12                 @param string $action 对象初始化传入的参数,代表响应的页面的是哪一个文件
13                 */
14                 function __construct($action = ""){
15                         $this->formAction = $action;    //把传入的参数保存到$formAction中;
16                         $this->shape = isset($_GET["shape"]) ? $_GET["shape"]:"rect";   //从表单传递的变量中获取图形类别,如没有传递,默认为矩形
17                 }
18                 function __toString(){
19                         $form = '
'; 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 php
 2 class result{
 3         private $shape = NULL;
 4 
 5         //使用GET传递的变量,实例化一个相应的对象,返回一个对象的引用;
 6         function __construct(){
 7                 $this->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 php
 2 /*      
 3         project:面向对象版图形计算器
 4         file:shape.class.php
 5         description:抽象类,定义两个抽象方法area()和perimeter(),以及定义方法validate对输入的值进行验证
 6 */
 7 abstract class shape{
 8         public $shapeName;                      //形状名称;
 9         abstract function area();               //抽象类area(),让子类去实现,体现多态性
10         abstract function perimeter();          //抽象类perimeter();
11 
12         /*
13                 @param mixed $value 接受表单输入值
14                 @param string $message 提示消息前缀
15                 @param boolean 返回值,成功为TRUE,失败为FALSE
16         */
17         protected function validate($value,$message = "输入的值"){
18                 if($value $value