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

上篇说到通过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()方法,此为封装,都封装成一个类里面的方法就可以。

时间: 2024-12-29 10:41:58

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

hp:兄弟连之面向对象版图形计算器2

上篇说到通过result.class.php来分流,由于三个类都继承了shape这个类,让我们来看一下,面向对象中的继承. shape.class.shape文件 <?php abstract class shape{ public $shapeName; abstract function area(); abstract function perimeter(); /* * 所有的实体类都要继承shape以便于统一方法和属性 * 验证 validate方法一致 * */ protected

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

曾经看细说PHP的时候就想做这个,可是一直没什么时间,这次总算忙里偷闲搞了代码量比較多的project. 首先,文档结构,都在一个文件夹下就好了,我的就例如以下. 一開始,进入index.php文件. <html> <head> <title>图形计算器(面向对象)</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"&

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

这个例子可能并不实用,但基本概括了面向对象的三个特征:继承性,封装性,多态性.本例的主要功能有: 让用户可以选择不同类型的图形: 对所选的图形输入其相关属性: 根据输入的属性计算该图形的周长和面积. 效果如下: 思路: A部分直接在index.php中写,点击对应是图形的时候发送一个$_GET["shape"]给自身页面,使用了自动加载类. B部分由form.class.php输出,其中使用了变量函数,用$_GET["shape"]的值调用不同的函数,确定不同图形的

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

运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php;    2.形状的抽象类shape.class.php;    3三角形计算类triangle.class.php;    4.矩形计算类rect.class.php. PHP图形计算器代码点击下载:   php图形计算器.zip 代码分别如下: PHP图形计算器主页: 1 2 3 4 5 6 7 8

Qt版科学计算器

Qt版科学计算器 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 之前做过<VC版科学计算器>,这也是我学VC++时的第一个大作业,通过科学计算器的开发使用我学到了很多东西,也让我逐渐喜欢上了编程.最近在学习Qt,所以将当时在VC下写过的一些东西在Qt下重写了一遍,其实主要还是与显示等有关的东西需要重写,要使用Qt的显示方式,而其他的核心的算法等都还是使用VC下C++的源码. 下面是Qt版的运行截图: 标准版: 科学版: 头文件中变量和槽的声明: c

GeoGebra(数学图形计算器)

插件介绍: 数学是我们生活中不可缺少的一部分,处处都会用的数学,在学习数学的过程中,普通的计算器已经无法满足数学学习了,图形计算器就运应而生,这大大滴提高了小伙伴们的学习效率,今天就给大家介绍一款图形计算器.GeoGebra(数学图形计算器)是一款适合于各种教育背景用户使用的动态数学软件.它将几何.代数.数学工作表 (Spreadsheet).作图.统计.微积分以直观易用的方式集于一体.用户还可以通过 www.geogebratube.org 分享和使用由 GeoGebra 制作的交互学习.教学

PHP 对象 多态性 简单图形计算器 高洛峰 细说PHP

主程序页面 test.php页面 <!DOCTYPE html> <html> <head>     <title>简单的图形计算器</title>     <meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" /> </head> <body>     <center>  

数据结构(八) AOV网的关键路径(Swift面向对象版)

上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的,但是工期不是最优的.因为拓扑序列是一个串行序列,如果按照该序列执行项目,那么就是串行执行的.我们知道在一个项目中的一些子工程是可以并行来完成的,这也就类似我们的多线程.今天我们要解决的问题就是找出一个关键路径,是工期最优并保证工程的完成.什么是关键路径,我们在下方会进行详细介绍. 一.关键路径概述 在聊关键路

超级简单版多态计算器

个人笔记学习黑马四期 一.编写一个操作父类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 多态计算器 { /// <summary> /// 计算父类 /// </summary> class Operation { public int NumA { get; set; } p