这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性。本例的主要功能有:让用户可以选择不同类型的图形;

对所选的图形输入其相关属性;

根据输入的属性计算该图形的周长和面积。

效果如下:

思路:A部分直接在index.php中写,点击对应是图形的时候发送一个$_GET["shape"]给自身页面,使用了自动加载类。

B部分由form.class.php输出,其中使用了变量函数,用$_GET["shape"]的值调用不同的函数,确定不同图形的表单中input部分。

C部分由result.class.php输出。声明一个抽象类,在rect,triangle,circle中实现抽象类中计算面积和周长的计算方法,体现继承性,封装性和多态性,使用new $_GET["shape"]()实例化对应图形的对象,再调用该对象中的方法,返回周长和面积。

需要改进的地方:本例子只是为了作为演示类的几个特性,并没有对用户的输入进行过滤,可能造成注入攻击,不适用于实际生产应用。实际应用时应该对用户的输入进行过滤,防止恶意攻击。

没有用DIV+CSS对页面布局进行优化,界面不是很友好。可以优化布局,改善用户体验。

index.php代码如下:

1

2

3 4

5

6

7

图形周长面积计算器

8

9 矩形

10 三角形

11 圆形

12

13

14 php15/*自动加载类*/16function __autoload($className){17include (strtolower($className).'.class.php');18}1920/*211.先new一个Form对象,发现没有form类的定义,把类名Form传递到自动加载类的函数参数进行类的自动加载。222.echo一个对象的引用,会调用该对象的__toString方法返回一个字符串,echo输出的就是对象返回的字符串,23这里输出一个表单等待用户的输入。24*/25echonew Form("index.php");2627/*如果用户点击了提交按钮,自动加载result类,输出结果*/28if(isset($_POST["sub"])){29echonewresult();30}31 ?>

32

33

34

form.class.php代码如下:

1 php2/*3project:面向对象版图形计算器4file:form.class.php5description:对不同的图形输出不同的表单6*/7classform{8private$formAction=NULL; //保存响应表单的文件9private$shape=NULL; //保存图形的形状1011/*12@param string $action 对象初始化传入的参数,代表响应的页面的是哪一个文件13*/14function __construct($action = ""){15$this->formAction = $action; //把传入的参数保存到$formAction中;16$this->shape = isset($_GET["shape"]) ? $_GET["shape"]:"rect"; //从表单传递的变量中获取图形类别,如没有传递,默认为矩形17}18function__toString(){19$form = '';20//下面两行使用变量函数调用对应图形的私有函数,返回input部分表单的字符串21$shape = 'get'.ucfirst($this->shape);22$form .= $this->$shape();2324$form .= '';25$form .= '';2627return$form;28}29//私有方法,返回矩形表单input部分的字符串;30privatefunctiongetRect(){31//在表单提交后输入的内容继续显示,防止其消失32$formheight=isset($_POST['height']) ? $_POST['height'] : NULL;33$formwidth=isset($_POST['width']) ? $_POST['width'] : NULL;34$input = '

请输入矩形的长和宽';35$input .= '矩形的高度:

';36$input .= '矩形的宽度:';37return$input;38}39//返回三角形输入表单input部分的字符串40privatefunctiongetTriangle(){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:';49return$input;50}51//返回圆形表单input部分的字符串52privatefunctiongetCircle(){53$formradius=isset($_POST['radius']) ? $_POST['radius'] : NULL; //在输入表单提交后内容继续显示出来,防止其消失54$input = '

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

result.class.php代码如下:

1 php2classresult{3private$shape = NULL;45//使用GET传递的变量,实例化一个相应的对象,返回一个对象的引用;6function__construct(){7$this->shape = new$_GET["shape"]();8}9//调用对象的属性和方法,返回周长和面积10function__toString(){11$result = $this->shape->shapeName.'的周长为'.$this->shape->perimeter().'';12$result .= $this->shape->shapeName.'的面积为'.$this->shape->area().'';13return$result;14}15 }

抽象类shape.class.php代码如下:

1 php2/*3project:面向对象版图形计算器4file:shape.class.php5description:抽象类,定义两个抽象方法area()和perimeter(),以及定义方法validate对输入的值进行验证6*/7abstractclassshape{8public$shapeName; //形状名称;9abstractfunction area(); //抽象类area(),让子类去实现,体现多态性10abstractfunction perimeter(); //抽象类perimeter();1112/*13@param mixed $value 接受表单输入值14@param string $message 提示消息前缀15@param boolean 返回值,成功为TRUE,失败为FALSE16*/17protectedfunction validate($value,$message = "输入的值"){18if($value < 0 || $value == NULL || !is_numeric($value)){19$message = $this->shapeName.$message;20echo ''.$message.'必须为正数

';21returnFALSE;22}23else24returnTRUE;25}26 }

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

1 php2/**3project:面向对象版图形计算器4file:triangle.class.php5description:继承抽象类shape,计算并返回三角形的周长和面积6*/7class triangle extendsshape{8private$side1 = 0; //边长1;9private$side2 = 0; //边长2;10private$side3 = 0; //边长3;1112/*13构造函数:对表单变量进行合理性验证,通过则初始化三个边长14*/15function__construct(){16$this->shapeName = "三角形"; //命名图形1718//使用父类的方法validate检查输入的是否为正数19if($this->validate($_POST["side1"],"边长1") & $this->validate($_POST["side2"],"边长2") & $this->validate($_POST["side3"],"边长3")){2021//使用私有方法验证两边和是否大于第三边22if($this->validatesum($_POST["side1"],$_POST["side2"],$_POST["side3"])){23$this->side1 = $_POST["side1"]; //若通过验证初始化三边;24$this->side2 = $_POST["side2"];25$this->side3 = $_POST["side3"];26}27else{28echo '两边的和要大于第三边';29exit();30}31}32else{33exit();34}35}36/*使用海伦公式计算面积,并返回结果*/37functionarea(){38$s = ($_POST["side1"] + $_POST["side2"] + $_POST["side3"])/2;39returnsqrt($s * ($s - $_POST["side1"]) * ($s - $_POST["side2"]) * ($s - $_POST["side3"]));40}41/*计算并返回周长*/42functionperimeter(){43return$_POST["side1"] + $_POST["side2"] + $_POST["side3"];44}45/*计算三角形两边和是否大于第三边,是返回TRUE,否返回FALSE*/46privatefunction validatesum($side1,$side2,$side3){47if(($side1 + $side2) > $side3 && ($side1 + $side3) > $side2 && ($side2 + $side3) > $side1)48returnTRUE;49else50returnFALSE;51}52 }

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

1 php2/*3project:面向对象的图形计算器4file:circle.class.php5description:接收表单值,返回周长和面积6*/7class circle extendsshape{8private$radius; //圆的半径910//初始化圆的名称,检查输入合法性并初始化半径11function__construct(){12$this->shapeName = "圆形";13if($this->validate($_POST["radius"],"半径"))14$this->radius = $_POST["radius"];15}16//返回圆的面积17functionarea(){18return 3.14 * $this->radius * $this->radius;19}20//返回圆的周长21functionperimeter(){22return 3.14 * 2 * $this->radius;23}24 }

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

1 php2/*3project:面向对象的图形计算器4file:rect.class.php5descrition:声明一个矩形资料,实现形状抽象类计算周长和面积的方法,返回矩形的周长和面积6*/7class rect extendsshape{8private$width; //矩形的宽度9private$height; //矩形的高度1011//使用父类的validate方法验证输入的合法性,通过则初始化宽度和高度12function__construct(){13$this->shapeName = "矩形";14if($this->validate($_POST["width"],"宽度") && $this->validate($_POST["height"],"高度")){15$this->width = $_POST["width"];16$this->height = $_POST["height"];17}18}19//返回面积20functionarea(){21return$this->width * $this->height;22}23//返回周长24functionperimeter(){25return 2 * ($this->width + $this->height);26}27 }

声明:

1.本文只适合实验,不适合现实应用,若造成不良后果,本人概不负责。

2.本文为原创博客,可以在个人平台自由转载,但需要注明出处,附上链接,否则视为盗用。严禁用于商业用途,如有需要,联系本人支付稿费,授权后方能使用。

以上就介绍了使用面向对象的图形计算器,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

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

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

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

    使用面向对象的图形计算器,面向对象图形计算器 这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性.本例的主要功能有: 效果如下: 思路: 需要改进的地方: index.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语言折半查找法_C语言学习|选择法排序及折半查找法查找
  2. Microsoft-Office-Professional-Plus-2007
  3. 【WEB安全】轻松检测钓鱼网站的技巧
  4. usb dfu和usb fastboot的区别
  5. matlab canny边缘,matlab – 定向Canny边缘检测
  6. hash redis springboot_Redis常见的工作场景使用实战,Redisson分布式锁的实现
  7. maple 2018 窗口关闭提示乱码_如果解决SOLIDWORKS工程图转CAD字体出现乱码的问题_SolidWorks生信科技...
  8. js 里面令人头疼的 this
  9. python错误提示库没有注册_SpringBoot实现登录注册常见问题解决方案
  10. 换5G手机别着急!雷军:再等等,我们不赚钱
  11. 安装环境及Git小技巧
  12. php 安卓注册,做一个Android应用的注册与登录功能
  13. python 数组中取出最小值_Python 数组中的冒号使用
  14. 银河麒麟双击deb包无法安装
  15. 在ubuntu上安装qq
  16. COPRA-for-AutoCAD 2005
  17. VidLoc:A Deep Spatio-Temporal Model for 6-DoF Video-Clip Relocalization用于6-DoF视频片段重新定位的深度时空模型
  18. 【原创】常用元器件(电阻)选型之阻值识别-cayden20220910
  19. 一款 Windows 上的万能工具 Wox
  20. c 传递流java 生僻字_Java语言中的生僻知识

热门文章

  1. SVN与TortoiseSVN修改日志和强制写日志实现详解
  2. win10默认安装路径修改_解放C盘!2种方法教你修改默认安装目录!
  3. 推动遗留系统现代化革新的三种方式
  4. 药方的量化方法笔记(学习与尝试):第二回 第四次 药方的拆解 量化方法的形式的发展 对药的量化分析
  5. 1546B - AquaMoon and Stolen String
  6. java逻辑测试题_《Java理解程序逻辑试题分析》
  7. 仿制金山毒霸专杀工具界面实现源码
  8. 安卓pdf阅读器_十二类安卓手机超赞的必备应用推荐!建议偷偷收藏!
  9. linux 安装keepalived,Keepalived的安装与配置
  10. 武汉理工大学数据结构综合实验——连连看游戏综合实践