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

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

效果如下:

思路:

需要改进的地方:

index.php代码如下:

1

2

3

4

5

6

7

图形周长面积计算器

8

9 矩形

10 三角形

11 圆形

12

13

14 php15 /*自动加载类*/

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 newresult();30 }31 ?>

32

33

34

form.class.php代码如下:

1 php2 /*

3 project:面向对象版图形计算器4 file:form.class.php5 description:对不同的图形输出不同的表单6 */

7 classform{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 functiongetRect(){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 functiongetTriangle(){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 functiongetCircle(){53 $formradius=isset($_POST['radius']) ? $_POST['radius'] : NULL; //在输入表单提交后内容继续显示出来,防止其消失

54 $input = '

请输入半径';55 $input .= '半径:';56 return $input;57 }58 }59

result.class.php代码如下:

1 php2 classresult{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 php2 /*

3 project:面向对象版图形计算器4 file:shape.class.php5 description:抽象类,定义两个抽象方法area()和perimeter(),以及定义方法validate对输入的值进行验证6 */

7 abstract classshape{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,失败为FALSE16 */

17 protected function validate($value,$message = "输入的值"){18 if($value < 0 || $value == NULL || !is_numeric($value)){19 $message = $this->shapeName.$message;20 echo ''.$message.'必须为正数

';21 return FALSE;22 }23 else

24 return TRUE;25 }26 }

子类triangle.class.php代码如下:

1 php2 /**3 project:面向对象版图形计算器4 file:triangle.class.php5 description:继承抽象类shape,计算并返回三角形的周长和面积6 */

7 class triangle extendsshape{8 private $side1 = 0; //边长1;

9 private $side2 = 0; //边长2;

10 private $side3 = 0; //边长3;

11

12 /*

13 构造函数:对表单变量进行合理性验证,通过则初始化三个边长14 */

15 function__construct(){16 $this->shapeName = "三角形"; //命名图形17

18 //使用父类的方法validate检查输入的是否为正数

19 if($this->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 functionarea(){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 functionperimeter(){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 else

50 return FALSE;51 }52 }

子类circle.class.php代码如下:

1 php2 /*

3 project:面向对象的图形计算器4 file:circle.class.php5 description:接收表单值,返回周长和面积6 */

7 class circle extendsshape{8 private $radius; //圆的半径9

10 //初始化圆的名称,检查输入合法性并初始化半径

11 function__construct(){12 $this->shapeName = "圆形";13 if($this->validate($_POST["radius"],"半径"))14 $this->radius = $_POST["radius"];15 }16 //返回圆的面积

17 functionarea(){18 return 3.14 * $this->radius * $this->radius;19 }20 //返回圆的周长

21 functionperimeter(){22 return 3.14 * 2 * $this->radius;23 }24 }

子类rect.class.php代码如下:

1 php2 /*

3 project:面向对象的图形计算器4 file:rect.class.php5 descrition:声明一个矩形资料,实现形状抽象类计算周长和面积的方法,返回矩形的周长和面积6 */

7 class rect extendsshape{8 private $width; //矩形的宽度

9 private $height; //矩形的高度10

11 //使用父类的validate方法验证输入的合法性,通过则初始化宽度和高度

12 function__construct(){13 $this->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 functionarea(){21 return $this->width * $this->height;22 }23 //返回周长

24 functionperimeter(){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使用面向对象的图形计算器,面向对象图形计算器 这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性。...

php面向对象编写计算器,使用面向对象的图形计算器,面向对象图形计算器_PHP教程...相关推荐

  1. 数学计算机代码,GeoGebra(数学图形计算器)(示例代码)

    插件介绍: 数学是我们生活中不可缺少的一部分,处处都会用的数学,在学习数学的过程中,普通的计算器已经无法满足数学学习了,图形计算器就运应而生,这大大滴提高了小伙伴们的学习效率,今天就给大家介绍一款图形 ...

  2. 2021-2027全球与中国3D图形计算器软件市场现状及未来发展趋势

    本文研究全球及中国市场3D图形计算器软件现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美.欧洲.日本.中国.东南亚.印度等地区的现状及未来发展趋势. 2019年全球3D图形计算器软件 ...

  3. php面向对象编写计算器,使用面向对象的图形计算器

    这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性.本例的主要功能有:让用户可以选择不同类型的图形: 对所选的图形输入其相关属性: 根据输入的属性计算该图形的周长和面积. 效 ...

  4. php面向对象编写计算器,面向对象的实例应用:图形计算器

    1.使用动态页面实现图形计算器,可以计算给定图形的周长和面积 2.可以使用接口或抽象类作为规范,再写各子类的多态 3.动态页面如下: #cal{ text-align: center; } 图形计算器 ...

  5. php:兄弟连之面向对象版图形计算器1

    曾经看细说PHP的时候就想做这个,可是一直没什么时间,这次总算忙里偷闲搞了代码量比較多的project. 首先,文档结构,都在一个文件夹下就好了,我的就例如以下. 一開始,进入index.php文件. ...

  6. 前端学PHP之面向对象系列第六篇——简单图形面积计算器实现

    前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?phpabstract class Shape{public $name;abstra ...

  7. 每日一题.PYTHON面向对象编写模拟人生屌丝逆袭游戏(登录类/角色类/场景类)?

    文件结构: [root@xmdevops xmdevops_limanman]# tree |grep -v ".pyc" |-- main.py                 ...

  8. 利用计算机或图形计算器在,利用图形计算器编写趣味数字游戏

    利用图形计算器编写趣味数字游戏 陕西省西安市第一中学高三 刘曜.权力 [问题起源] 一些小型电子设备上常会有一些数字游戏,很有趣.例如计算机随机输出1个3位数,但是不予显示,要求玩家在最短的时间内把它 ...

  9. Java面向对象编程篇2——面向对象三大特点

    Java面向对象编程篇2--面向对象三大特点 1.封装 1.1.封装的概念 通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无 论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生 ...

最新文章

  1. 学C++走游戏方向,是不是非常艰难自找苦吃?
  2. 003_Servlet生命周期
  3. java长连接例子_java实现长连接
  4. python 生成器_Python生成器中的GeneratorExit
  5. 简单描述char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别
  6. Verilog中wire与reg类型的区别(转载自http://www.cnblogs.com/farbeyond/p/5204586.html)
  7. ROS入门 SLAM
  8. 【转载】白话经典算法系列之六 快速排序 快速搞定
  9. Kafka的安装部署(分布式部署安装)
  10. 计算机组成原理实验箱连接显示输出,计算机组成原理实验箱介绍.ppt
  11. tftp java_TFTP服务器搭建
  12. python csv文件比较
  13. SVM支持向量机原理及代码实现(包含数学原理,超详细)
  14. 数据结构基础— How Long Does It Take
  15. 关于MMORPG多人对战中热点问题的解决思路讨论
  16. 又开始的python-day10-20200821-文件操作相关内置函数-拷贝-读取-写入
  17. 【B2B2C多用户】WSTMart商城系统 V2.0.6更新版发布
  18. 还要帮彬彬做课件,我苦啊
  19. 程序黑框中出现:(路径)用作为当前目录的以上路径启动了 CMD.EXE。 UNC 路径不受支持,默认值设为 Windows 目录。
  20. 技术,管理,和境界问题

热门文章

  1. android4.0触摸屏(touchscreen)以及屏幕按键驱动解析
  2. The Unarchiver 4 for Mac(解压缩软件)
  3. 关于HDBaseT远距离无压缩4K传输的知识点都在这里了!!!
  4. android 设备最大像素,设备像素比devicePixelRatio简单介绍
  5. 高中会考计算机试题学科网,高中物理会考复习资料
  6. linux 浏览器缓存目录在哪里找,火狐浏览器缓存文件在哪里
  7. 动了别人的奶酪!卡萨帝会遭遇“围攻”吗?
  8. 【报告分享】2021中国女性婚恋观白皮书-壹心理(附下载)
  9. Tomcat8080端口冲突,强制关闭端口方法
  10. 在Ubuntu 16.04系统中,将Logitech G920方向盘连接到Carla服务器