1. 程式人生 > >php面向物件程式設計練習:計算矩形、三角形、圓形的周長和麵積

php面向物件程式設計練習:計算矩形、三角形、圓形的周長和麵積

剛剛學完php面向物件的程式設計,參考著高洛峰老師的php教程學習了這個例項。

效果圖片:

三角形
矩形
圓形

以下是實現程式碼:

index.php

<html>
<head>
    <title>圖形計算(使用面向物件開發技術)</title>
    <meta http-equiv="Content-Type" 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 //php程式碼部分 error_reporting(E_ALL & ~E_NOTICE);//提示錯誤的等級 // __autoload是php中的魔術方法,在用到類的時候自動呼叫 function __autoload($className
)
{ //自動匯入這個類 include strtolower($className).".class.php"; } //輸出表單,form類中有魔術方法__toString,因此可以直接輸出類的物件引用,就是輸出物件返回的字串 echo new Form(); if(isset($_POST["sub"])){ //輸出結果 echo new Result();//直接輸出物件的引用表示 } ?>
</body
>
</html>
form.class.php_這是表單類_
<?php
    //根據index中提交的不同action的值返回不同的表單
    class Form{
        private $action;
        private $shape;
        //構造方法
        function __construct($action=""){
            $this->action = $action;
            $this->shape=isset($_REQUEST["action"])?$_REQUEST["action"]:"rect";
        }

        function __toString()
        {
            // TODO: Implement __toString() method.
            $form='<form action="'.$this->action.'"  method="post">';
            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;
        }

    }
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/4/15
 * Time: 16:26
 *
 */
shape.class.php 這是一個抽象類,用來定義規範的
<?php
abstract class Shape {
    public $shapeName;
    //規範circle、triangle、rect中必須有area()、perimeter()方法
    abstract function area();
    abstract function perimeter();

    public function setShapeName($shapeName)
    {
        $this->shapeName = $shapeName;
        return $this;
    }
    //判斷輸入的數字是否為大於0的有效數字
    protected function validate($value, $message="形狀"){
        if($value == "" || !is_numeric($value) || $value < 0 ){
            echo '<font color="red"> '.$message.' 必須為非負值的數字,並且不能為空 </font><br>';
            return false;
        } else {
            return true;
        }
    }
}

/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/4/15
 * Time: 16:42
 */
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;
    }
}

/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/4/15
 * Time: 17:06
 */
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);
    }
}
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/4/15
 * Time: 17:02
 */
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->side1=$_POST["side1"];
        }

        if($this->validate($_POST['side2'], '三角形的第二個邊')){
            $this->side2=$_POST["side2"];

        }
        if($this->validate($_POST['side3'], '三角形的第三個邊')){
            $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;
        }
    }

}
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/4/15
 * Time: 17:04
 */
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;
            }
        }

        /**
         * @return string
         */
        function __toString()
        {
            // TODO: Implement __toString() method.
            if($this->shape){
                $result=$this->shape->shapeName.'的周長:'.$this->shape->perimeter().'<br>';
                $result.=$this->shape->shapeName.'的面積:'.$this->shape->area().'<br>';
                return $result;
            }else{
                return '沒有這個形狀';
            }
        }
    }
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/4/15
 * Time: 16:47
 */

相關推薦

php面向物件程式設計練習計算矩形三角形圓形周長和麵

剛剛學完php面向物件的程式設計,參考著高洛峰老師的php教程學習了這個例項。 效果圖片: 以下是實現程式碼: index.php <html> <hea

PHP面向物件程式設計面向物件概念基本實踐高階實戰PHP面向物件特殊實踐

一、面向物件的概念 1.1 什麼是面向物件(object oriented)      世間萬物皆物件,抽象的也是物件,一切可見或不可見都是物件 1.2 物件的基本組成     

JAVA 面向物件程式設計練習(一個回合制的戰鬥遊戲戰士,騎兵,法師,電腦互相攻擊)

一. 小編有話說 前面一篇文章寫了JAVA面向物件程式設計的思想,本文主要展示關於面向物件程式設計的例項(一個回合制的戰鬥遊戲:戰士,騎兵,法師,電腦互相攻擊),小編的基礎暫時薄弱,如此一來有助於更深入的理解和靈活的運用,以及打下堅實的基礎。 二. 遊戲的要求

PHP面向物件程式設計詳解類和物件

從OOP的視角看,不應區分語言。無論是C++、無論是Java、無論是.net還有更多面向物件的語言,只要你瞭解了OO的真諦,便可以跨越語言,讓你的思想輕鬆的跳躍。便沒有對於Java、.net、PHP 之間誰強誰弱的爭執了。 希望這個介紹PHP5面向物件程式設計(OOP)的資料能讓初學者受益,能讓更多的PH

C++Primer_Chap15_面向物件程式設計_List01_OOP概述_筆記

面向物件程式設計(object-oriented programming)的核心思想是資料抽象、繼承和動態繫結。   使用資料抽象,可以將類的介面與實現分離   使用繼承,可以定義相似的型別並對其相似關係建模   使用動態繫結,可以一定程度上忽略相似型別的區

淺談PHP面向物件程式設計(九)

9.0 設計模式   在編寫程式時經常會遇到一此典型的問題或需要完成某種特定需求,設計模式就是針對這些問題和需求,在大量的實踐中總結和理論化之後優選的程式碼結構程式設計風格,以及解決問題的思考方式。 設計模式就像是經典的棋譜。不同的棋局,使用不同的棋諧,免得自己再去思考和模索。本節將針對PHP應用程式

淺談PHP面向物件程式設計(五)

5.0 繼承   5.1 繼承的概念      在現實生活中,繼承一般指的是子女繼承父輩的財產。在程式中,繼承描述的是事物之間的所屬關係,通過繼承可以使許多事物之間形成一種關係體系 。     例如貓和狗都屬於動物,程式中便可以描述為貓和

淺談PHP面向物件程式設計(七)

7.0 抽象類與介面   當定義一個類時,常常需要定義一些方法來描述該類的行為特徵、但有時這些方法的實現方式是無法確定的,此時就可以使用抽象類和介面。 抽象類和介面用於提高程式的靈活性、抽象類是一種特殊的類,而介面又是一種待殊的抽象類。 接下來本節將針對抽象類和介面進行詳細講解。 7.

淺談PHP面向物件程式設計(六)

6.0 自動載入及魔術方法    6.1 自動載入 在PHP開發過程中,如果希望從外部引入一個class.通常會使用incluae和requre方法把定義這個class的檔案包含進來。但是,在大型的開發專案中,這麼做會產生大量的require或者include方法的使用。這樣不僅

淺談PHP面向物件程式設計(二)

和一些面向物件的語言有所不同,PHP並不是一種純面向物件的語言,包PIP它支援面向物件的程式設計,並可以用於開發大型的商業程式。因此學好面向物件輸程對PHP程式設計師來說也是至關重要的。本章並針對面向物件程式設計在PIP語言中的使用進行詳細講解。 2.1 面向物件概述   面向物件是一種符

淺談PHP面向物件程式設計(一)

傳統的面向過程   將要完成的工作,分作若干個步驟,或再細分為子步驟,然後後步驟從前往後一步一步完成,最初達致目標。 現代的面向物件   將要完成的工作拆分為“一個一個物件”的任務(功能),每個物件獨自完成自己的任務,任務之間的連結通過“呼叫”來實現,最終也完成了整體的工

PHP面向物件程式設計(1)基礎

一、面向物件OOP(Oriented Object Programming)   面向過程的程式設計 將要實現的功能描述為一個從一開始到結束的連續的“步驟(過程)”。 一次逐步完成這些步驟。如果步驟比較大,又可以將該步驟細分為子步驟,以此類推。 程式從頭開

面向物件程式設計練習(開篇)

      今天無意中看到了一些關於面向物件程式設計的練習題,私以為很是不錯,摘錄其中較有代表性的幾道,供大家學習。     一.面向物件三大特性,各有什麼用處?     1.繼承:解決程式碼的複用性問題     2.封裝:對資料屬性嚴格控制,隔離複雜度     3.多型性:增加程式的靈活

php面向物件程式設計5大原則+6大設計模式

一、面向物件程式設計的6大設計原則 單一職責原則——類要職責單一,一個類只需要做好一件事情。 里氏替換原則——子類可以擴充套件父類的功能,但不能改變父類原有的功能(可以實現父類的抽象方法和增加自己特有的方法,不要覆蓋父類的非抽象方法)。 依賴倒置原則——-面向介面程式設計:只

JS面向物件程式設計封裝繼承多型

          一、封裝       (1)封裝通俗的說,就是我有一些祕密不想讓人知道,就通過私有化變數和私有化方法,這樣外界就訪問不到了。然後如果你有一些很想讓大家知道的東西,你就可以通

C#面向物件程式設計練習

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T

PHP面向物件之旅一個介面例項,很好的例子

我們設計一個線上銷售系統,使用者部分設計如下: 將使用者分為,NormalUser, VipUser, InnerUser三種。 要求根據使用者的不同折扣計算使用者購買產品的價格。 並要求為以後擴充套件和維護預留空間。 使用者部分先聲明瞭一個介面User,使用者都是User

PHP面向物件程式設計設計模式(一)策略模式

(一)什麼是面向物件程式設計   面向物件(OO)的定義是什麼,在面向物件的入門課程C++(或者JAVA)中,封裝資料和方法好像是面向物件最重要的一個特點,當然還有基於繼承實現的多型和過載。其實每一種OOP語言,由於彼此功能上的差異性,這些特點只能適用於某一種

python面向物件程式設計例項飛機大戰

說明:此則部落格只是自己學習python程式設計的學習記錄,其中完成的程式設計只是飛機大戰的小小小demo,只為自己熟悉python語言和pygame,所以程式並不完善,只當練手和記錄,當然可基於次程式進行後續的完善開發。最後感謝一下hm的python教程。至於程式中的圖片

PHP面向物件程式設計

類中常用關鍵字 1、關鍵字 :final       用來定義類和方法的一個重要關鍵字,當定義類的時候該類將不能被繼承, 當用來定義方法的時候該方法將不能被過載 2、關鍵字 : self       用來用類訪問當前類中的內容的關鍵字,類似與$this關鍵字,但$this