前面的话

  本文用面向对象的技术来实现一个简单的图形面积计算器

图形类

//rect.class.php
<?php
abstract class Shape{
public $name;
abstract function area();
abstract function view();
abstract function test($arr);
}
?>

主界面

//index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.box{
width: 800px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="box">
<h1>图形计算器</h1>
<div>
<a href="index.php?action=rect">矩形</a>
<a href="index.php?action=triangle">三角形</a>
</div>
</div>
<?php
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($classname){
include strtolower($classname).".class.php";
}
if(!empty($_GET['action'])) {
$classname = ucfirst($_GET['action']);
$shape=new $classname($_POST);
$shape->view();
if(isset($_POST['dosubmit'])) {
if($shape->test($_POST)) {
echo $shape->name."的面积为:".$shape->area()."<br>";
}
}
}else{
echo "请选择一个要计算的图形!<br>";
}
?>
</body>
</html>

矩形类

//rect.class.php
<?php
class Rect extends Shape{
private $width;
private $height;
function __construct($arr=[]){
if(!empty($arr)){
$this->width = $arr['width'];
$this->height = $arr['height'];
}
$this->name = "矩形";
}
function area() {
return $this->width * $this->height;
}
function view() {
$form = '<form action="index.php?action=rect" method="post">';
$form .=$this->name.'的宽:<input name="width" value=""/><br>';
$form .=$this->name.'的高:<input name="height" value=""/><br>';
$form .='<input type="submit" name="dosubmit" value="计算"><br>';
$form .='</form>';
echo $form;
}
function test($arr) {
$bg = true;
if($arr['width'] < 0) {
echo $this->name."的宽不能小于0!<br>";
$bg = false;
}
if($arr['height'] < 0) {
echo $this->name."的高度不能小于0!<br>";
$bg = false;
}
return $bg;
}
}
?>

三角形类

//triangle.class.php
<?php
class Triangle extends Shape{
private $b1;
private $b2;
private $b3;
function __construct($arr=[]){
if(!empty($arr)){
$this->b1 = $arr['b1'];
$this->b2 = $arr['b2'];
$this->b3 = $arr['b3'];
}
$this->name = "三角形";
}
function area() {
$p = ($this->b1 + $this->b2 + $this->b3)/2;
return sqrt($p*($p-$this->b1)*($p-$this->b2)*($p-$this->b3));
}
function view() {
$form = '<form action="index.php?action=triangle" method="post">';
$form .=$this->name.'第一个边的宽:<input name="b1" value=""/><br>';
$form .=$this->name.'第二个边的宽:<input name="b2" value=""/><br>';
$form .=$this->name.'第三个边的宽:<input name="b3" value=""/><br>';
$form .='<input type="submit" name="dosubmit" value="计算"><br>';
$form .='</form>';
echo $form;
}
function test($arr) {
$bg = true;
if($arr['b1'] < 0) {
echo "第一个边的宽不能小于0!<br>";
$bg = false;
}
if($arr['b2'] < 0) {
echo "第二个边的宽不能小于0!<br>";
$bg = false;
}
if($arr['b3'] < 0) {
echo "第三个边的宽不能小于0!<br>";
$bg = false;
}
if(($arr['b1'] + $arr['b2'] < $arr['b3'])||($arr['b1'] + $arr['b3'] < $arr['b2'])||($arr['b3'] + $arr['b2'] < $arr['b1'])){
echo '两边之和不能小于第三边<br>';
$bg = false;
}
return $bg;
}
}
?>

前端学PHP之面向对象系列第六篇——简单图形面积计算器实现的更多相关文章

  1. 前端学PHP之面向对象系列第五篇——对象操作

    × 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...

  2. 前端学PHP之面向对象系列第四篇——关键字

    × 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ...

  3. 前端学PHP之面向对象系列第三篇——三大特性

    × 目录 [1]封装 [2]继承[3]多态 前面的话 php面向对象编程的三大特性是封装性.继承性和多态性.本文将介绍php的这三大特性 封装 封装就是把对象中的成员属性和成员方法加上访问修饰符( p ...

  4. 前端学PHP之面向对象系列第四篇-----关键字

    public public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问 如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有 <?php ...

  5. 前端学PHP之面向对象系列第二篇——魔术方法

    × 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...

  6. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  7. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  8. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  9. List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

    最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...

随机推荐

  1. C#遍历DataSet中数据的几种方法总结

    //多表多行多列的情况foreach (DataTable dt in YourDataset.Tables) //遍历所有的datatable{foreach (DataRow dr in dt.R ...

  2. 对Hibernate的理解

    ---恢复内容开始--- 一.面向对象设计的软件内部运行过程可以理解成就是不断创建各种新对象,建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程.不管程序运行的过程和操作怎么样,本 ...

  3. C#SerialPort如何读取串口数据并显示在TextBox上

    SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一.线程实时读串口:二.事件触发方式实现. 由于线程实时读串口的效率不是十分高 ...

  4. clear属性

    clear:规定元素的哪一侧不允许其他浮动元素. clear 属性定义了元素的哪边上不允许出现浮动元素.在 CSS1 和 CSS2 中,这是通过自动为清除元素(即设置了 clear 属性的元素)增加上 ...

  5. easyui-conbotree树形下拉框。。。转

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...

  6. ant的安装及项目的发布

    1.安装ant1) 直接解压apache-ant-1.9.7-bin 2) 在环境变量中配置,ant_home的环境变量在 3) 在命令提示符中测试是否安装成功. 2 项目首次打包1) 写好打包的配置 ...

  7. WPF整理-Mutex确保Application单例运行

    有时我们不希望我们的WPF应用程序可以同时运行有多个实例,当我们试图运行第二个实例的时候,已经运行的实例也应该弹出来. 我们可以用Mutex来实现 打开App.xaml.cs,在App类中添加如下内容 ...

  8. Thrift-0.9.2编译安装

    确定安装好了boost1.54以上 确定libevent版本大于1.0 只编译生成cpp库 ./configure --without-java --without-lua --without-pyt ...

  9. 公司内部培训SQL Server传统索引结构PPT分享

    公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...

  10. 一步步学习javascript基础篇(2):作用域和作用域链

    作用域和作用域链 js的语法用法非常的灵活,且稍不注意就踩坑.这集来分析下作用域和作用域链.我们且从几道题目入手,您可以试着在心里猜想着答案. 问题一. if (true) { var str = & ...