时间:2021-07-01 10:21:17 帮助过:16人阅读
效果如下:
思路:
需要改进的地方:
index.php代码如下:
1 2 3 4 5 6 7输出的就是对象返回的字符串, 23 这里输出一个表单等待用户的输入。 24*/25echonew Form("index.php"); 2627/*如果用户点击了提交按钮,自动加载result类,输出结果*/28if(isset($_POST["sub"])){ 29echonew result(); 30 } 31 ?> 32 33 34图形周长面积计算器
8 9 矩形 10 三角形 11 圆形 12 13 14 php 15/*自动加载类*/16function __autoload($className){ 17include (strtolower($className).'.class.php'); 18 } 1920/*21 1.先new一个Form对象,发现没有form类的定义,把类名Form传递到自动加载类的函数参数进行类的自动加载。 22 2.echo一个对象的引用,会调用该对象的__toString方法返回一个字符串,echo
form.class.php代码如下:
1 php 2/* 3 project:面向对象版图形计算器 4 file:form.class.php 5 description:对不同的图形输出不同的表单 6*/ 7class form{ 8private$formAction=NULL; //保存响应表单的文件 9private$shape=NULL; //保存图形的形状1011/*12 @param string $action 对象初始化传入的参数,代表响应的页面的是哪一个文件 13*/14function __construct($action = ""){ 15$this->formAction = $action; //把传入的参数保存到$formAction中;16$this->shape = isset($_GET["shape"]) ? $_GET["shape"]:"rect"; //从表单传递的变量中获取图形类别,如没有传递,默认为矩形17 } 18function __toString(){ 19$form = ''; 2627return$form; 28 } 29//私有方法,返回矩形表单input部分的字符串;30privatefunction getRect(){ 31//在表单提交后输入的内容继续显示,防止其消失32$formheight=isset($_POST['height']) ? $_POST['height'] : NULL; 33$formwidth=isset($_POST['width']) ? $_POST['width'] : NULL; 34$input = '
请输入矩形的长和宽
'; 35$input .= '矩形的高度:请输入三角形的三边
'; 46$input .= '边长1:'; 47$input .= '边长2:'; 48$input .= '边长3:'; 49return$input; 50 } 51//返回圆形表单input部分的字符串52privatefunction getCircle(){ 53$formradius=isset($_POST['radius']) ? $_POST['radius'] : NULL; //在输入表单提交后内容继续显示出来,防止其消失54$input = '请输入半径
'; 55$input .= '半径:'; 56return$input; 57 } 58 } 59result.class.php代码如下:
1 php 2class result{ 3private$shape = NULL; 4 5//使用GET传递的变量,实例化一个相应的对象,返回一个对象的引用; 6function __construct(){ 7$this->shape = new$_GET["shape"](); 8 } 9//调用对象的属性和方法,返回周长和面积10function __toString(){ 11$result = $this->shape->shapeName.'的周长为'.$this->shape->perimeter().''; 12$result .= $this->shape->shapeName.'的面积为'.$this->shape->area().''; 13return$result; 14 } 15 }
抽象类shape.class.php代码如下:
1 php 2/* 3 project:面向对象版图形计算器 4 file:shape.class.php 5 description:抽象类,定义两个抽象方法area()和perimeter(),以及定义方法validate对输入的值进行验证 6*/ 7abstractclass shape{ 8public$shapeName; //形状名称; 9abstractfunction area(); //抽象类area(),让子类去实现,体现多态性10abstractfunction perimeter(); //抽象类perimeter();1112/*13 @param mixed $value 接受表单输入值 14 @param string $message 提示消息前缀 15 @param boolean 返回值,成功为TRUE,失败为FALSE 16*/17protectedfunction validate($value,$message = "输入的值"){ 18if($value < 0 || $value == NULL || !is_numeric($value)){ 19$message = $this->shapeName.$message; 20echo ''.$message.'必须为正数
'; 21returnFALSE; 22 } 23else24returnTRUE; 25 } 26 }
子类triangle.class.php代码如下:
1 php 2/** 3 project:面向对象版图形计算器 4 file:triangle.class.php 5 description:继承抽象类shape,计算并返回三角形的周长和面积 6*/ 7class triangle extends shape{ 8private$side1 = 0; //边长1; 9private$side2 = 0; //边长2;10private$side3 = 0; //边长3;1112/*13 构造函数:对表单变量进行合理性验证,通过则初始化三个边长 14*/15function __construct(){ 16$this->shapeName = "三角形"; //命名图形 1718 //使用父类的方法validate检查输入的是否为正数19if($this->validate($_POST["side1"],"边长1") & $this->validate($_POST["side2"],"边长2") & $this->validate($_POST["side3"],"边长3")){ 2021//使用私有方法验证两边和是否大于第三边22if($this->validatesum($_POST["side1"],$_POST["side2"],$_POST["side3"])){ 23$this->side1 = $_POST["side1"]; //若通过验证初始化三边;24$this->side2 = $_POST["side2"]; 25$this->side3 = $_POST["side3"]; 26 } 27else{ 28echo '两边的和要大于第三边'; 29exit(); 30 } 31 } 32else{ 33exit(); 34 } 35 } 36/*使用海伦公式计算面积,并返回结果*/37function area(){ 38$s = ($_POST["side1"] + $_POST["side2"] + $_POST["side3"])/2; 39returnsqrt($s * ($s - $_POST["side1"]) * ($s - $_POST["side2"]) * ($s - $_POST["side3"])); 40 } 41/*计算并返回周长*/42function perimeter(){ 43return$_POST["side1"] + $_POST["side2"] + $_POST["side3"]; 44 } 45/*计算三角形两边和是否大于第三边,是返回TRUE,否返回FALSE*/46privatefunction validatesum($side1,$side2,$side3){ 47if(($side1 + $side2) > $side3 && ($side1 + $side3) > $side2 && ($side2 + $side3) > $side1) 48returnTRUE; 49else50returnFALSE; 51 } 52 }
子类circle.class.php代码如下:
1 php 2/* 3 project:面向对象的图形计算器 4 file:circle.class.php 5 description:接收表单值,返回周长和面积 6*/ 7class circle extends shape{ 8private$radius; //圆的半径 910 //初始化圆的名称,检查输入合法性并初始化半径11function __construct(){ 12$this->shapeName = "圆形"; 13if($this->validate($_POST["radius"],"半径")) 14$this->radius = $_POST["radius"]; 15 } 16//返回圆的面积17function area(){ 18return 3.14 * $this->radius * $this->radius; 19 } 20//返回圆的周长21function perimeter(){ 22return 3.14 * 2 * $this->radius; 23 } 24 }
子类rect.class.php代码如下:
1 php 2/* 3 project:面向对象的图形计算器 4 file:rect.class.php 5 descrition:声明一个矩形资料,实现形状抽象类计算周长和面积的方法,返回矩形的周长和面积 6*/ 7class rect extends shape{ 8private$width; //矩形的宽度 9private$height; //矩形的高度 1011 //使用父类的validate方法验证输入的合法性,通过则初始化宽度和高度12function __construct(){ 13$this->shapeName = "矩形"; 14if($this->validate($_POST["width"],"宽度") && $this->validate($_POST["height"],"高度")){ 15$this->width = $_POST["width"]; 16$this->height = $_POST["height"]; 17 } 18 } 19//返回面积20function area(){ 21return$this->width * $this->height; 22 } 23//返回周长24function perimeter(){ 25return 2 * ($this->width + $this->height); 26 } 27 }
声明:
1.本文只适合实验,不适合现实应用,若造成不良后果,本人概不负责。
2.本文为原创博客,可以在个人平台自由转载,但需要注明出处,附上链接,否则视为盗用。严禁用于商业用途,如有需要,联系本人支付稿费,授权后方能使用。
以上就介绍了使用面向对象的图形计算器,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。