上篇说到通过result.class.php来分流,因为三个类都继承了shape这个类,让我们来看一下,面向对象中的继承。

shape.class.shape文件

<?php
abstract class shape{
public $shapeName;
abstract function area();
abstract function perimeter(); /*
* 全部的实体类都要继承shape以便于统一方法和属性
* 验证 validate方法一致
* */
protected function validate($value,$message="形状"){
if($value == "" ||!is_numeric($value)||$value < 0){
echo '<font color="red">'.$message.'必须为非负值的数>字,而且不能为空</font><br>';
return false;
} else{
return true;
}
} } ?>

这是一个抽象类,优点就在于,第一个,定义了统一的属性和方法。这样在result里面就能够统一的调用$shapename属性和area()和perimeter()。

同事还能够构造公用的方法,比方验证方法validate。

下面是详细每一个类的实现

rect.class.php实现rect矩形类

<?php
class Rect extends Shape {
private $width = 0;
private $height = 0;
function __construct() {
$this->shapeName = "矩形"; if ($this->validate ( $_POST ["width"], '矩形的宽度' ) & $this->validate ( $_POST ["height"], '矩形的高度' )) { $this->width = $_POST ["width"]; $this->height = $_POST ["height"];
} else {
exit ();
} $this->width = $_POST ["width"]; $this->height = $_POST ["height"];
}
function area() {
return $this->width * $this->height;
}
function perimeter() {
return 2 * ($this->width + $this->height);
}
} ?>

triangle.class.php实现triangle三角形类

<?php
class Triangle extends Shape{
private $side1=0;
private $side2=0;
private $side3=0; function __construct(){
$this->shapeName="三角形";
if($this->validate($_POST['side1'],'三角形的第一边')&&
$this->validate($_POST['side2'],'三角形的第一边')
&&$this->validate($_POST['side3'],'三角形的第一边')){
$this->side1=$_POST["side1"];
$this->side2=$_POST["side2"];
$this->side3=$_POST["side3"];
}
if(!$this->validateSum()){
echo '<font color="red">三角形的两边之和必须大于第三边</font>';
exit;
}
}
//海伦公式
function area(){
$s=($this->side1+$this->side2+$this->side3)/2;
return sqrt( $s*($s-$this->side1)*($s-$this->side2)*($s-$this->side3)); }
function perimeter(){
return $this->side1+$this->side2+$this->side3;
} private function validateSum(){
$condition1=($this->side1+$this->side2) > $this->side3;
$condition2=($this->side1+$this->side3) > $this->side2;
$condition3=($this->side2+$this->side3) > $this->side1;
if($condition1 && $condition2 && $condition3){
return true;
} else{return false;}
}
}
?>

circle.class.php实现circle圆类

<?php
class Circle extends Shape{
private $radius=0; function __construct(){
$this->shapeName="圆形";
if($this->validate($_POST['radius'],'圆的半径')){
$this->radius.$_POST["radius"];
}else{exit;}
$this->radius=$_POST["radius"];
}
function area(){
return pi()*$this->radius*$this->radius;
}
function perimeter(){
return 2*pi()*$this->radius;
}
} ?>

全部的类都继承了shape类,实现里面的方法和为属性赋值,用构造方法和详细不用的计算方法实现每一个类不同的多态性,同一时候对外部调用人来说,都是调用area()和perimter()方法,此为封装,都封装成一个类里面的方法就可以。

php:兄弟连之面向对象版图形计算器2的更多相关文章

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

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

  2. PHP学习笔记06——面向对象版图形计算器

    index.php 用于显示页面 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h ...

  3. PHP.11-PHP实例(二)-面向对象实例(图形计算器)

    面向对象实例(图形计算器) [PHP语法详解] 1.实现外观 #不同的动作,输出不同的表单 ###关于PHP中,无法使用localhost访问.php文件[http://www.360doc.com/ ...

  4. 【计项02组01号】Java版图形界面计算器

    Java版图形界面计算器1.0版本 项目分析[1.0] 组成部分 代码结构 (1)窗口的创建 在<JDK 核心 API>中我们提到,创建一个窗口需要使用 JFrame 类.在本实验中,我们 ...

  5. PHP图形计算器(计算三角形矩形周长面积)

    运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php;   ...

  6. 【面向对象版】HashMap(增删改查)

    前言: 关于什么是HashMap,HashMap可以用来做些什么,这些定义类的描述,请参照[简易版]HashMap(增删改查)的内容. 这章节主要是面向实例,直接进行HashMap(增删改查)的演示. ...

  7. 面向对象版js分页

    基于前一个js分页,我将代码改成一个面向对象版的js分页,代码如下 http://peng666.github.io/blogs/pageobj <!DOCTYPE html> <h ...

  8. php实现图形计算器

    存档: index.php <html> <head> <title>图形计算器开发</title> <meta http-equiv=" ...

  9. [图形计算器]Desmos

    一.图形计算器 var elt = document.getElementById('calculator'); var calculator = Desmos.GraphingCalculator( ...

随机推荐

  1. uml笔记

    把进度放在好了: 活动图与业务流程 对业务流程支持的主要图形就是活动图,活动图的主要目的在陈述活动与活动之间流程控制的转移.

  2. STL之queue(单向队列)

    单向队列中的数据是先进先出(First In First Out,FIFO).单向队列一共6个常用函数(front().back().push().pop().empty().size()) #inc ...

  3. shell学习之用户管理和文件属性

    1.组和用户的添加 添加组: groupadd [-g gid [-o]] [-r] [-f] group 示例: groupadd -g testgoup1 #添加组testgroup1,同时指定g ...

  4. FPGA知识大梳理(二)verilogHDL语法入门(1)

    此文是写给0基础学习者,也是对自己知识点总结水平的考验. 对于有C基础的人来说,学习verilog应该是轻而易举 —— 类比法学习. 第一步:格式. 对于C来说我们前面会写  ‘include“std ...

  5. git 代理设置

    git 代理设置: git config --global http.proxy http://proxy.com:8080git config --global https.proxy http:/ ...

  6. ASP.NET MVC3 Razor视图引擎-基础语法

    I:ASP.NET MVC3在Visual Studio 2010中的变化 在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化. 1.ASP.NET MVC3必要的运行环境 ...

  7. 转:requirejs打包压缩r.js使用示例

    为了应对日益复杂,大规模的JavaScript开发.我们化整为零,化繁为简.将复杂的逻辑划分一个个小单元,各个击破.这时一个项目可能会有几十个甚至上百个JS文件,每个文件为一个模块单元.如果上线时都是 ...

  8. Qt 技巧:去除对话框边框 + 设置窗口可移动和透明

    1.去除对话框标题栏和边框 在构造函数里设置:    this->setWindowFlags(Qt::FramelessWindowHint); Qt::Dialog     (按照对话框的形 ...

  9. c++ ptrdiff_t 类型

    ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型.ptrdiff_t类型变量通常用来保存两个指针减法操作的结果.ptrdiff_t定义在stddef.h(cstddef)这个文件内 ...

  10. <jsp:include page="">和<%@include page=""%> 标签学习

    <jsp:include page=""><jsp:param value=""name=""/><DEL&g ...