为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 对象 多态性 简单图形计算器

标签:
PHP

主程序页面 test.php页面

<!DOCTYPE html>

<html>

<head>

    <title>简单的图形计算器</title>

    <meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" />

</head>

<body>

    <center>

    <h1>简单的图形计算器</h1>

    <a href = "test.php?action=rectangle">矩形</a>&nbsp;&nbsp;&nbsp;||&nbsp;&nbsp;&nbsp;

    <a href = "test.php?action=triangle">三角形</a>

    </center>

    <br/><hr>

    <?php

    //屏蔽E_NOTICE提示

    error_reporting(E_ALL & ~E_NOTICE);

    //设置自动加载这个程序需要的类文件

    function __autoload($classname){

        include $classname.'.class.php';

    }

    //判断用户是否单击一个形状链接

    if(!empty($_GET['action'])){

        //第一步:创建形状的对象

        $classname = ucfirst($_GET['action']);

        $shape = new $classname($_POST);

        //第二步:调用形状的对象中的图形界面

        $shape->view();

        //第三步:用户是否提交了对应的图形界面的表单

        if(isset($_POST['dosubmit'])){

            //第四步:查看用户输入的数据是否合法,不合法则提示

            if($shape->validate($_POST)){

            //第五步:计算图形的面积和周长

            echo $shape->name.'的面积为:'.$shape->area().'<br/>';

            echo $shape->name.'的周长为:'.$shape->circumference().'<br/>';

            }

        }        

    }else{//如果用户没有单击则默认访问主程序

        echo '请选择一个要计算的图形';

    }

    ?>

</body>

</html>


形状抽象类Shape.class.php页面

<?php 

 //形状抽象类

abstract class Shape{

        public  $name;

        //面积

        abstract function area();

        //周长

        abstract function circumference();

        //图形界面

        abstract function view();

        //形状验证方法

        abstract function validate($arr);         

}


矩形类Rectangle.class.php页面

<?php 

//矩形类

class Rectangle extends Shape{

    private $width;

    private $height;

    function __construct($arr=array()){

        if(!empty($arr)){

        $this->width   =  $arr['width'];

        $this->height  =  $arr['height'];

        }

        $this->name   =  '矩形';

    }

     function area(){

        return $this->width*$this->height;

    }

    //周长

    function circumference(){

        return 2*($this->width+$this->height);

    }

    //图形界面

  function view(){

        $form =  '<form action="test.php?action=rectangle" method="post">';

        $form .= $this->name.'的宽:<input type="text" name="width" value="'.$_POST['width'].'" /> <br/>'; 

        $form .= $this->name.'的高:<input type="text" name="height" value="'.$_POST['height'].'" /> <br/>'; 

        $form .= '<input type="submit" name="dosubmit" value="计算" /> <br/>'; 

        $form .= '</form>';

        echo $form;

    }

    //形状验证方法

     function validate($arr){

        $flag = true;

        if($arr['width']<0 || !is_numeric($arr['width'])){

            echo $this->name.'的宽必须是大于0的整数<br/>';

            $flag = false;

        }

        if($arr['height']<0 || !is_numeric($arr['height'])){

            echo $this->name.'的高必须是大于0的整数<br/>';

            $flag = false;

        }

        return $flag;

    }}


三角形类Triangle.class.php页面

<?php 

//三角形类

class Triangle extends Shape{

    private $edge1;

    private $edge2;

    private $edge3;

 

    function __construct($arr=array()){

        if(!empty($arr)){

        $this->edge1   =  $arr['edge1'];

        $this->edge2   =  $arr['edge2'];

        $this->edge3   =  $arr['edge3'];        

        }

        $this->name   =  '三角形';

    }

     function area(){

         $p =($this->edge1+$this->edge2+$this->edge3)/2;         

        return sqrt($p*($p-$this->edge1)*($p-$this->edge2)*($p-$this->edge3));

    }

    //周长

    function circumference(){

        return ($this->edge1+$this->edge2+$this->edge3);

    }

    //图形界面

  function view(){

        $form =  '<form action="test.php?action=triangle" method="post">';

        $form .= $this->name.'的第一个边:<input type="text" name="edge1" value="'.$_POST['edge1'].'" /> <br/>'; 

        $form .= $this->name.'的第二个边:<input type="text" name="edge2" value="'.$_POST['edge2'].'" /> <br/>'; 

        $form .= $this->name.'的第三个边:<input type="text" name="edge3" value="'.$_POST['edge3'].'" /> <br/>'; 

        $form .= '<input type="submit" name="dosubmit" value="计算" /> <br/>'; 

        $form .= '</form>';

        echo $form;

    }

    //形状验证方法

     function validate($arr){

        $flag = true;

        if($arr['edge1']<0 || !is_numeric($arr['edge1'])){

            echo $this->name.'的第一边必须是大于0的整数<br/>';

            $flag = false;

        }

        if($arr['edge2']<0 || !is_numeric($arr['edge2'])){

            echo $this->name.'的第二边必须是大于0的整数<br/>';

            $flag = false;

        }

        if($arr['edge3']<0 || !is_numeric($arr['edge3'])){

            echo $this->name.'的第三边必须是大于0的整数<br/>';

            $flag = false;

        }

        if(($arr['edge1']+$arr['edge2']<$arr['edge3']) || ($arr['edge1']+$arr['edge3']<$arr['edge2'])||($arr['edge3']+$arr['edge2']<$arr['edge1']) ){

            echo '三角形定义必须两边之和大于第三边<br/>';

            $flag = false;

        }

        return $flag;

    }     

}


浏览器 矩形页面

wKioL1fH6jyDX36YAAAlAetgXQU441.png-wh_50

浏览器 三角形页面

wKiom1fH6pnis5EBAAAsmecwmrE954.png-wh_50

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
8
获赞与收藏
24

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消