前面的话

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

图形类

//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. Visual Studio 2013执行项目报错:HTTP 错误 500.22

    转至:http://www.codingwhy.com/410.html 具体报错 HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ...

  2. 做 Web 开发少不了这些的

    抱歉,似乎有些标题党了.最近做服务器的热备,整理了些李纳斯工具的适用方法.看看还有不错的. 基本命令 sleep 500 暂停 ctrl + z 暂停 progress & 后台运行 jobs ...

  3. PHP浮点数精度问题

    这一段时间维护一个类似团购的系统,需要处理订单,也就难免会处理金额 所以有很多PHP的坑 被我狠狠的踩了~~ 首先我们要知道浮点数的表示(IEEE 754): 简言之 就是 埋下了一个大坑 等着你跳 ...

  4. tornado 学习笔记15 _ServerRequestAdapter分析

         继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息. 15.1 构造函数 def __init__(self, ser ...

  5. Linux下Nano命令使用指南

    1.什么时候用nano? 一般网络很卡,ssh时一用vim/vi 就死窗口,或者死机的情况 2.如何使用?   打开或新建文件 #nano 文件名    禁用自动换行 #nano -w /etc/fs ...

  6. JS中数组的操作[转]

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  7. Windows多线程多任务设计初步(转)

    Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...

  8. FIR on Hadoop using hadoop-streaming

    1.Prepare Hadoop Streaming Hadoop streaming allows you to create and run Map/Reduce jobs with any ex ...

  9. 利用fsockopen可实现异步成功访问

    $fp = fsockopen("www.jb51.net", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ( ...

  10. js ---- 时间格式

    Js获取当前日期时间及其它操作 var myDate = new Date(); myDate.getYear();        //获取当前年份(2位) myDate.getFullYear(); ...