首页 > 代码库 > hp:兄弟连之面向对象版图形计算器2
hp:兄弟连之面向对象版图形计算器2
上篇说到通过result.class.php来分流,由于三个类都继承了shape这个类,让我们来看一下,面向对象中的继承。
shape.class.shape文件
<?php abstract class shape{ public $shapeName; abstract function area(); abstract function perimeter(); /* * 所有的实体类都要继承shape以便于统一方法和属性 * 验证 validate方法一致 * */ protected function validate($value,$message="形状"){ if($value =http://www.mamicode.com/= "" ||!is_numeric($value)||$value < 0){>这是一个抽象类,好处就在于,第一个,定义了统一的属性和方法。这样在result里面就可以统一的调用$shapename属性和area()和perimeter()。
同事还可以构造公用的方法,比如验证方法validate。
以下是具体每个类的实现
rect.class.php实现rect矩形类
<?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 (); } $this->width = $_POST ["width"]; $this->height = $_POST ["height"]; } function area() { return $this->width * $this->height; } function perimeter() { return 2 * ($this->width + $this->height); } } ?>triangle.class.php实现triangle三角形类<?php class Triangle extends Shape{ private $side1=0; private $side2=0; private $side3=0; function __construct(){ $this->shapeName="三角形"; if($this->validate($_POST['side1'],'三角形的第一边')&& $this->validate($_POST['side2'],'三角形的第一边') &&$this->validate($_POST['side3'],'三角形的第一边')){ $this->side1=$_POST["side1"]; $this->side2=$_POST["side2"]; $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;} } } ?>circle.class.php实现circle圆类<?php class Circle extends Shape{ private $radius=0; function __construct(){ $this->shapeName="圆形"; if($this->validate($_POST['radius'],'圆的半径')){ $this->radius.$_POST["radius"]; }else{exit;} $this->radius=$_POST["radius"]; } function area(){ return pi()*$this->radius*$this->radius; } function perimeter(){ return 2*pi()*$this->radius; } } ?>所有的类都继承了shape类,实现里面的方法和为属性赋值,用构造方法和具体不用的计算方法实现每个类不同的多态性,同时对外部调用人来说,都是调用area()和perimter()方法,此为封装,都封装成一个类里面的方法即可。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。