86、PHP面向对象实例(图形计算器)

阅读() @2018-10-29 18:16:08

今天晚上抽时间用PHP写了一个面向对象实例(图形计算器),虽然在实际项目中运用不大,但是有助于我们理解面向对象的用法,总共包含6个PHP文件,所有的代码如下:

1、index.php文件:

<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<title>图形计算器</title>
		<meta name="keywords" content="" />
		<meta name="description" content="" />
		<style type="text/css">
            .prompt{font-size:16px;font-weight:bold;}
        </style>
	</head>
	<body>
		<!-- 
    		  @Description  PHP面向对象实例(图形计算器)
              @Author  赵一鸣
              @DownloadDemo http://www.zymseo.com/demo/calculator.rar
              @Date  2016年10月9日
		 -->
		<div align="center">
			<span>矩形&三角形&圆形(周长/面积)计算器</span><br/>
			<a href="index.php?action=rect">矩形</a>|
			<a href="index.php?action=triangle">三角形</a>|
			<a href="index.php?action=circle">圆形</a>
		</div>
		<hr/>
		<?php
    	  function __autoload($classname){
    	      include strtolower($classname).'.class.php';
    	  }
    	  //点击a标签,显示对应的形状输入框
    	  $shape = new Shape($_GET['action']);
    	  //开始计算
    	  if(isset($_GET['sub'])){
    	      $result = new Result();
    	  }
		?>
		<script type="text/javascript" src="http://www.zymseo.com/js/demo.js"></script>
        <script type="text/javascript">
        	//js判断当前形状,并标红
        	var $a = $('a');
        	var $inpt = $('input[name="action"]');
        	var $inptVal = $inpt.val();
        	switch($inptVal){
        		case 'rect':
        			$a.eq(0).css({'color':'#f00'});
        			break;
        		case 'triangle':
        			$a.eq(1).css({'color':'#f00'});
        			break;
        		case 'circle':
        			$a.eq(2).css({'color':'#f00'});
        			break;
        	}
		</script>
	</body>
</html>

2、shape.class.php文件:

<?php
    /**
     * @Description  PHP面向对象实例(图形计算器)
     * @Author  赵一鸣
     * @DownloadDemo http://www.zymseo.com/demo/calculator.rar
     * @Date  2016年10月9日
     */
    
    class Shape{
        //形状
        private $action;
        //初始化
        public function __construct($action){
            //通过get方式得到具体的形状,默认是矩形
            $this->action = $action=='' ? 'rect' : $action;
            echo $this->show_shape();
        }
        //展示形状
        private function show_shape(){
            $form.='<form action="" method="get">';
            switch($this->action){
                case 'rect':
                    $form.='
                        <p class="prompt">请输入矩形的宽、高:</p>
                        <p><label>宽:</label><input type="text" name="rect_width" /></p>
                        <p><label>高:</label><input type="text" name="rect_height" /></p>
                        <p><input type="hidden" name="action" value="rect" /></p>
                    ';
                    break;
                case 'triangle':
                    $form.='
                         <p class="prompt">请输入三角形的三条边长:</p>
                         <p><label>边一:</label><input type="text" name="triangle_length_1" /></p>  
                         <p><label>边二:</label><input type="text" name="triangle_length_2" /></p>   
                         <p><label>边三:</label><input type="text" name="triangle_length_3" /></p>
                         <p><input type="hidden" name="action" value="triangle" /></p>
                    ';
                    break;
                case 'circle':
                    $form.='
                        <p class="prompt">请输入圆形的半径:</p>
                        <p><label>半径:</label><input type="text" name="circle_radius" /></p>
                        <p><input type="hidden" name="action" value="circle" /></p>
                    ';
                    break;
                default:
                    die('没有此图形!');
                    exit();
            }
            $form.='
                <p><input type="submit" name="sub" value="计算" /></p>
            </form>';
            return $form;
        }
    }

3、Result.class.php文件:

<?php
    /**
     * @Description  PHP面向对象实例(图形计算器)
     * @Author  赵一鸣
     * @DownloadDemo http://www.zymseo.com/demo/calculator.rar
     * @Date  2016年10月9日
     */
    class Result{
        private $shape;
        //点击开始计算之后,执行矩形、圆形、三角形对应的周长与面积方法。
        public function __construct(){
            switch($_GET['action']){
                case 'rect':
                    $this->shape = new Rect();
                    break;
                case 'triangle':
                    $this->shape = new Triangle();
                    break;
                case 'circle':
                    $this->shape = new Circle();
                    break;
                default:
                    die('没有这个图形!');
                    exit();
            }
        }
    }

4、rect.class.php文件:

<?php
    /**
     * @Description  PHP面向对象实例(图形计算器)
     * @Author  赵一鸣
     * @DownloadDemo http://www.zymseo.com/demo/calculator.rar
     * @Date  2016年10月9日
     */
    class Rect{
        //矩形宽度
        private $rect_width = 0;
        //矩形高度
        private $rect_height = 0;
        //矩形周长
        private $show_perimeter;
        //矩形面积
        private $show_area;
        //初始化
        public function __construct(){
            $this->rect_width = $_GET['rect_width']>0 ? $_GET['rect_width'] : 0;
            $this->rect_height = $_GET['rect_height']>0 ? $_GET['rect_height'] : 0;
            
            echo '宽:'.$this->rect_width.'<br/>高:'.$this->rect_height.'<br/>';
            
            echo $this->perimeter();
            echo $this->area();
        }
        //矩形周长计算方法
        private function perimeter(){
            $this->show_perimeter = 2*($this->rect_width + $this->rect_height);
            return '矩形的周长是:'.$this->show_perimeter.'<br/>';
        }
        //矩形面积计算方法
        private function area(){
           $this->show_area = $this->rect_width * $this->rect_height;
           return '矩形的面积是:'.$this->show_area.'<br/>';
        }
    }

5、triangle.class.php文件:

<?php
    /**
     * @Description  PHP面向对象实例(图形计算器)
     * @Author  赵一鸣
     * @DownloadDemo http://www.zymseo.com/demo/calculator.rar
     * @Date  2016年10月9日
     */
    class Triangle{
        //三角形第一条边
        private $triangle_length_1;
        //三角形第二条边
        private $triangle_length_2;
        //三角形第三条边
        private $triangle_length_3;
        //三角形周长
        private $show_perimeter;
        //三角形面积
        private $show_area;
        //判断是否是三角形
        private $isRight = false;
        //初始化
        public function __construct(){
            $this->triangle_length_1 = $_GET['triangle_length_1'];
            $this->triangle_length_2 = $_GET['triangle_length_2'];
            $this->triangle_length_3 = $_GET['triangle_length_3'];
            
            echo '第一条边:'.$this->triangle_length_1.'<br/>第二条边:'.$this->triangle_length_2.'<br/>第三条边:'.$this->triangle_length_3.'<br/>';
            
            if($this->validate()){
                echo $this->perimeter().'<br/>';
                echo $this->area();
            }else{
                echo '<p style="color:#f00">三角形的两边之和必须大于第三边</p>';
            }
        }
        //三角形周长计算方法
        private function perimeter(){
            $this->show_perimeter = $this->triangle_length_1 + $this->triangle_length_2 + $this->triangle_length_3;
            return '三角形的周长是:'.$this->show_perimeter;
        }
        //三角形面积计算方法
        private function area(){
            $s=( $this->triangle_length_1+$this->triangle_length_2+$this->triangle_length_3 )/2;
            return '三角形的面积是:'.ceil(sqrt( $s * ($s - $this->triangle_length_1) * ($s - $this->triangle_length_2) * ($s - $this->triangle_length_3) ));
        }
        //验证三角形
        private function validate(){
            if($this->triangle_length_1+$this->triangle_length_2<$this->triangle_length_3){
                $this->isRight = false;
            }else if($this->triangle_length_1+$this->triangle_length_3<$this->triangle_length_2){
                $this->isRight = false;
            }else if($this->triangle_length_2+$this->triangle_length_3<$this->triangle_length_1){
                $this->isRight = false;
            }else{
                $this->isRight = true;
            }
            return $this->isRight;
        }
    }

6、circle.class.php文件:

<?php
    /**
     * @Description  PHP面向对象实例(图形计算器)
     * @Author  赵一鸣
     * @DownloadDemo http://www.zymseo.com/demo/calculator.rar
     * @Date  2016年10月9日
     */
    class Circle{
        //圆形半径
        private $circle_radius = 0;
        //圆形周长
        private $show_perimeter;
        //圆形面积
        private $show_area;
        //初始化
        public function __construct(){
            $this->circle_radius = $_GET['circle_radius']>0 ? $_GET['circle_radius'] : 0;
            
            echo '半径:'.$this->circle_radius.'<br/>';
            
            echo $this->perimeter().'<br/>';
            echo $this->area();
        }
        //圆形周长计算方法
        private function perimeter(){
            $this->show_perimeter = 2 * M_PI * $this->circle_radius;
            return '圆的周长是:'.ceil($this->show_perimeter);
        }
        //圆形面积计算方法
        private function area(){
            $this->show_area = M_PI * pow($this->circle_radius, 2);
            return '圆的面积是:'.ceil($this->show_area);
        }
    }

(完)!

微信二维码
锐壳主机