新しい Sphere.class.php ファイルを作成します:
ここで注意する必要があります。抽象グラフィックス クラスには area メソッドと perimeter メソッドしかなく、球には面積と体積が必要であるためです
これら 2 つのメソッドを実装することもできますが、面積と体積は計算時に計算され、印刷時に変更することもできます。
<?php function area() { return 4*pi()* $this->r* $this->r; ; } //求的体积 function zhou() { return pow((4/3)*$this->r*pi(),3); }
全体のコードは次のとおりです。
<?php class Sphere extends Shape { private $r; // private $height; function __construct($arr = array()) { if (!empty($arr)) { $this->r = $arr['r']; // $this->height = $arr['height']; } $this->name = "球体"; $this->error = ''; } //:4π(R的平方),体积 4/3π*r的立方 //球的面积 function area() { return 4*pi()* $this->r* $this->r; ; } //求的体积 function zhou() { return pow((4/3)*$this->r*pi(),3); } function view($arr) { $form=''; $form .= "<form action='index.php?action=sphere' method='post'>"; $form .= "请输入".$arr['name']."的半径:<input type='text' name='r' value='".$_POST['r']."'/><br>"; $form .= "<br>"; $form .= "<input type='submit' name='sub' value='提交'/> "; $form .= "<input type='reset' name='ret' value='重置'/>"; $form .= "</form>"; echo $form; } function yan($arr) { $bz = true; if ($arr['r']< 0) { $this->error .= "半径小于0;"; $bz = false; } else { if (!is_numeric($arr['r'])) { $this->error .= "半径不是数字;"; $bz = false; } } return $bz; } }
インデックス .php コードの変更:
<?php if (!empty($_GET['action'])) { // echo "传送成功"; $classname = ucfirst($_GET['action']); $shape = new $classname($_POST); $shape->view($_POST); if (isset($_POST['sub'])) { echo "<div id='footer'>"; if($shape->name!='球体'){ 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>"; }else{ if ($shape->yan($_POST)) { echo "<b>".$shape->name."的表面积".$shape->area()."</b>"."<br>"; echo "<br>"; echo "<b>".$shape->name."的体积".$shape->zhou()."</b>"."<br>"; }else { echo "<b>错误:$shape->error</b>"; } echo "</div>"; } } } else { echo "请选择一个图形"; }
実行結果の表示:
次のセクション