效果:

index.php

<!DOCTYPE html>
<html>
<head>
    <title>图形计算(使用面向对象技术开发)</title>
    <meta http-equiv="content" content="text/html" charset="utf-8" />
</head>
<body>
    <center>  <!--居中-->
        <h1>图形(周长&面积)计算器</h1>
        <!--计算图形的链接-->
        <a href="index.php?action=rect">矩形</a>||
        <a href="index.php?action=triangle">三角形</a>||
        <a href="index.php?action=circle">圆形</a>
        <hr>   <!--创建一条水平分隔线-->
    </center>

    <?php
        //错误报告处理
        //error_reporting(E_ALL & ~E_NOTUCE);
        //自动加载需要的类文件
        function __autoload($className){
            //strtolower()函数,把类名转化为小写
            include strtolower($className).".class.php";
        }
        echo new Form();

        if(isset($_POST["sub"])){
            echo new Result();
        }
    ?>
</body>
</html>

form.class.php

<?php
class Form{
    private $action;
    private $shape;

    //在PHP5中的构造方法
    function __construct($action=""){
        $this->action=$action;
        $this->shape=isset($_REQUEST["action"])?$_REQUEST["action"]:"rect";
    }

    //在直接输出对象引用的时候自动调用
    function __toString(){
        $form='<form action="'.$this->action.'" method="post">';
        //echo $this->shape;
        switch($this->shape){
            case "rect":
                //要加到表单里面,要返回字符串
                $form.=$this->getRect();
                break;
            case "triangle":
                $form.=$this->getTriangle();
                break;
            case "circle":
                $form.=$this->getCircle();
                break;
            default:
                $form.='请选择一个形状<br>';
        }
        $form.='<input type="submit" name="sub" value="计算">';
        $form.='</form>';
        return $form;
    }

    //得到矩形的方法
    private function getRect(){
        $input='<b>请输入矩形的宽度和高度:</b><p>';
        $input.='宽度:<input type="text" name="width" value="'.$_POST["width"].'"><br>';
        $input.='高度:<input type="text" name="height" value="'.$_POST["height"].'"><br>';
        $input.='<input type="hidden" name="action" value="rect">';
        return $input;
    }
    //得到三角形的方法
    private function getTriangle(){
        $input='<b>请输入三角形的三条边:</b><p>';
        $input.='第一条边:<input type="text" name="side1" value="'.$_POST["side1"].'"><br>';
        $input.='第二条边:<input type="text" name="side2" value="'.$_POST["side2"].'"><br>';
        $input.='第三条边:<input type="text" name="side3" value="'.$_POST["side3"].'"><br>';
        $input.='<input type="hidden" name="action" value="triangle">';
        return $input;
    }
    //得到圆形的方法
    private function getCircle(){
        $input='<b>请输入圆形的半径:</b><p>';
        $input.='半径:<input type="text" name="radius" value="'.$POST["radius"].'"><br>';
        $input.='<input type="hidden" name="action" value="circle">';
        return $input;
    }
}
?>

shape.class.php

<?php
abstract class Shape{
    public $shapeName;
    abstract function area();
    abstract function perimeter();

    //验证
    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.class.php

<?php
class Result{
    private $shape;

    function __construct(){
        switch ($_POST['action']) {
            case 'rect':
                $this->shape=new Rect();
                break;
            case 'triangle':
                $this->shape=new Triangle();
                break;
            case 'circle':
                $this->shape=new Circle();
                break;
            default:
                $this->shape=false;
                break;
        }
    }

    //在直接输出对象引用的时候自动调用
    function __toString(){
        if($this->shape){
            $result=$this->shape->shapeName."的周长:".$this->shape->perimeter().'<br>';
            $result.=$this->shape->shapeName."的面积:".$this->shape->area().'<br>';
            return $result;
        }else{
            return "没有这个形状<br>";
        }
    }
}
?>

Rect.class.php

<?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;
        }

    }
    //面积
    function area(){
        return $this->width*$this->height;
    }
    //周长
    function perimeter(){
        return 2*($this->width+$this->height);
    }
}
?>

Triangle.class.php

<?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><br>';
                exit;
            }
        }else{
            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

<?php
class Circle extends Shape{
    private $radius=0;

    function __construct(){
        $this->shapeName="圆形";

        if($this->validate($_POST["radius"],'圆的半径')){
            $this->radius=$_POST["radius"];
        }else{
            exit;
        }
    }

    function area(){
        return pi()*$this->radius*$this->radius;
    }

    function perimeter(){
        return 2*pi()*$this->radius;
    }
}
?>

PHP面向对象实例(图形计算器)的更多相关文章

  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:兄弟连之面向对象版图形计算器2

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

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

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

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

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

  6. php实现图形计算器

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

  7. [图形计算器]Desmos

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

  8. 图形计算器(geogebra[5.0.278.0])使用QQ浏览器打开下载

    点击这里下载Geogebra图形计算器

  9. php:的图形计算器的面向对象的版本武器2

    通过自带部分result.class.php分流,由于这三个类继承shape这个类,让我们来看看,面向对象的继承. shape.class.shape档 <?php abstract class ...

随机推荐

  1. JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式     ...

  2. Java—图形处理

    抽象窗口化工具(AWT)为图形用户界面编程提供API编程接口,使得Java可以提供较好的图形用户界面. AWT把图形处理分为两个层次:一是处理原始图形,这一层较原始,图形直接以点.线和面的形式画到界面 ...

  3. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  4. 【基本技能篇】>>第3篇《暗时间_指导学习的方法论——心得》

    暗时间——指导学习的方法论 ——2016年2月11日 打造自己的核心竞争力:①专业领域技能:②跨领域的技能(解决问题的能力,创新思维,判断与决策能力,表达沟通能力等等):③学习能力,持续学习和思考新知 ...

  5. 二:基础概述netty

    如果不了解netty的,可以百度下,netty社区现在也比较活跃. 现在所谓的大数据,flume,storm等底层都是netty.   netty的性能模型: io模型---->异步非阻塞io ...

  6. 转发 XHTML 和 DOCTYPE 切换(MSDN)

    使用 Web 标准生成 ASP.NET 2.0 Web 站点 XHTML 和 DOCTYPE 切换 为 Web页指定 DOCTYPE 会影响浏览器呈现页的方式.Internet Explorer.Mo ...

  7. ASP.NET POST XML JSON数据,发送与接收

    接收端通过Request.InputStream读取:byte[] byts = new byte[Request.InputStream.Length];Request.InputStream.Re ...

  8. blade and soul Group Combos

    Group Combos A martial artist always make friends along their way. They learn how to work and fight ...

  9. Java线程(七):Callable和Future

    转自:http://blog.csdn.net/ghsau/article/details/7451464 本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. C ...

  10. [css3]叉叉旋转效果

    .close_frame{display:inline-block;height:14px;width:14px;background:url("../images/closeiframe. ...