考慮到圖形有很多種,我們可以先建一個圖形抽象類別,提供所有圖形公共的屬性和方法,
這樣其他圖形可以直接繼承他,減少了程式碼的冗餘,符合物件導向的想法
1,新建Shap.class.php檔案
圖形的名稱$name,錯誤訊息$error,週長area()和麵積zhou(),以及每次計算之後都有驗證yan()
<?php abstract class Shape { private $name; private $error; abstract function area(); abstract function zhou(); abstract function view($arr); abstract function yan($arr); } ?>
2,新建Rect.class.php檔案
新矩形類別之後繼承圖形類別,實作對應的方法,每種圖形除了繼承的屬性和方法外還有自己獨特的屬性和方法,例如矩形就有長和寬,球體就有球半徑等
定義矩形的屬性$width和$height
使用構造函數使其進行實例化是自動給name和error賦值
分別進行面積和周長的計算
點擊矩形之後需要顯示輸入框,這時只需要定義給一個方法view()來打印出輸入框即可
為矩形按鈕加一個a標籤
<a href='index.php?action=rect'>矩形</a> |
#點擊之後進行get請求,並把view裡印出來的輸入框展示出來,程式碼如下:
<?php if (!empty($_GET['action'])) { $shape = new Rect(); $shape->view(); }
<?php class Rect extends Shape { private $width; private $height; function __construct() { $this->name = "矩形"; $this->error = ''; } function area() { return $this->width * $this->height; } function zhou() { return ($this->width+$this->height) * 2; } function view($arr) { $form=''; $form .= "<form action='index.php?action=rect' method='post'>"; $form .= "请输入".$arr['name']."的宽度:<input type='text' name='width' value='".$_POST['width']."'/><br>"; $form .= "<br>"; $form .= "请输入".$arr['name']."的长度:<input type='text' name='height' value='".$_POST['height']."'/><br>"; $form .= "<br>"; $form .= "<input type='submit' name='sub' value='提交'/> "; $form .= "<input type='reset' name='ret' value='重置'/>"; $form .= "</form>"; echo $form; } } ?>
3,驗證訊息的列印
矩形類別裡新加方法:
<?php function yan($arr) { $bz = true; if ($arr['width']< 0) { $this->error .= "宽度小于0;"; $bz = false; } else { if (!is_numeric($arr['width'])) { $this->error .= "宽不是数字;"; $bz = false; } } if ($arr['height']< 0) { $this->error .= "宽度小于0;"; $bz = false; } else { if (!is_numeric($arr['height'])) { $this->error .= "高不是数字;"; $bz = false; } } return $bz; }
#列印驗證資訊,index.php程式碼:
if (!$shape->yan($_POST)) { echo "<b>错误:$shape->error</b>"; } echo "</div>";
如果驗證訊息正確則印出正確的周長和麵積:
<?php echo "<div id='footer'>"; if ($shape->yan($_POST)) { echo "<b>".$shape->name."的周长".$shape->zhou()."</b>"."<br>"; echo "<br>"; echo "<b>".$shape->name."的面积".$shape->area()."</b>"."<br>"; }else { echo "<b>错误:$shape->error</b>"; } echo "</div>";
#運行結果:
#思考:在index.php裡需要引進Rect.class.php檔案,
require 'Rect.class. php';計算其他圖形時也需要引入,有沒有辦法可以一次引進所有的類別檔案?(下一節介紹)#######下一節