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