前端学PHP之面向对象系列第六篇——简单图形面积计算器实现
前面的话
本文用面向对象的技术来实现一个简单的图形面积计算器
图形类
//rect.class.php
<?php
abstract class Shape{
public $name;
abstract function area();
abstract function view();
abstract function test($arr);
}
?>
主界面
//index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.box{
width: 800px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="box">
<h1>图形计算器</h1>
<div>
<a href="index.php?action=rect">矩形</a>
<a href="index.php?action=triangle">三角形</a>
</div>
</div>
<?php
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($classname){
include strtolower($classname).".class.php";
}
if(!empty($_GET['action'])) {
$classname = ucfirst($_GET['action']);
$shape=new $classname($_POST);
$shape->view();
if(isset($_POST['dosubmit'])) {
if($shape->test($_POST)) {
echo $shape->name."的面积为:".$shape->area()."<br>";
}
}
}else{
echo "请选择一个要计算的图形!<br>";
}
?>
</body>
</html>
矩形类
//rect.class.php
<?php
class Rect extends Shape{
private $width;
private $height;
function __construct($arr=[]){
if(!empty($arr)){
$this->width = $arr['width'];
$this->height = $arr['height'];
}
$this->name = "矩形";
}
function area() {
return $this->width * $this->height;
}
function view() {
$form = '<form action="index.php?action=rect" method="post">';
$form .=$this->name.'的宽:<input name="width" value=""/><br>';
$form .=$this->name.'的高:<input name="height" value=""/><br>';
$form .='<input type="submit" name="dosubmit" value="计算"><br>';
$form .='</form>';
echo $form;
}
function test($arr) {
$bg = true;
if($arr['width'] < 0) {
echo $this->name."的宽不能小于0!<br>";
$bg = false;
}
if($arr['height'] < 0) {
echo $this->name."的高度不能小于0!<br>";
$bg = false;
}
return $bg;
}
}
?>
三角形类
//triangle.class.php
<?php
class Triangle extends Shape{
private $b1;
private $b2;
private $b3;
function __construct($arr=[]){
if(!empty($arr)){
$this->b1 = $arr['b1'];
$this->b2 = $arr['b2'];
$this->b3 = $arr['b3'];
}
$this->name = "三角形";
}
function area() {
$p = ($this->b1 + $this->b2 + $this->b3)/2;
return sqrt($p*($p-$this->b1)*($p-$this->b2)*($p-$this->b3));
}
function view() {
$form = '<form action="index.php?action=triangle" method="post">';
$form .=$this->name.'第一个边的宽:<input name="b1" value=""/><br>';
$form .=$this->name.'第二个边的宽:<input name="b2" value=""/><br>';
$form .=$this->name.'第三个边的宽:<input name="b3" value=""/><br>';
$form .='<input type="submit" name="dosubmit" value="计算"><br>';
$form .='</form>';
echo $form;
}
function test($arr) {
$bg = true;
if($arr['b1'] < 0) {
echo "第一个边的宽不能小于0!<br>";
$bg = false;
}
if($arr['b2'] < 0) {
echo "第二个边的宽不能小于0!<br>";
$bg = false;
}
if($arr['b3'] < 0) {
echo "第三个边的宽不能小于0!<br>";
$bg = false;
}
if(($arr['b1'] + $arr['b2'] < $arr['b3'])||($arr['b1'] + $arr['b3'] < $arr['b2'])||($arr['b3'] + $arr['b2'] < $arr['b1'])){
echo '两边之和不能小于第三边<br>';
$bg = false;
}
return $bg;
}
}
?>
前端学PHP之面向对象系列第六篇——简单图形面积计算器实现的更多相关文章
- 前端学PHP之面向对象系列第五篇——对象操作
× 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...
- 前端学PHP之面向对象系列第四篇——关键字
× 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ...
- 前端学PHP之面向对象系列第三篇——三大特性
× 目录 [1]封装 [2]继承[3]多态 前面的话 php面向对象编程的三大特性是封装性.继承性和多态性.本文将介绍php的这三大特性 封装 封装就是把对象中的成员属性和成员方法加上访问修饰符( p ...
- 前端学PHP之面向对象系列第四篇-----关键字
public public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问 如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有 <?php ...
- 前端学PHP之面向对象系列第二篇——魔术方法
× 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- javascript面向对象系列第三篇——实现继承的3种形式
× 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...
- javascript面向对象系列第四篇——选项卡的实现
前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...
- List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇
最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...
随机推荐
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- MVC高级编程+C#高级编程
本人今年的目标是学习MVC高级编程和C#高级编程,把自己的基础打的扎实,本文中值是一个开到,定期会在上面记录学习的技术点和心得就,加油吧!!!!!
- 基于webpack和vue.js搭建开发环境
前言 在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己.秉承着“不听老人言,吃亏在眼前”的优良作风,我还是决定玩火自焚. ...
- iOS XMPP 通信协议实现 图形化直观感受
第一次随笔,实在不知写点什么有用的东西,那就分享一下本人最近的研究所得吧! 是关于iOS-XMPP-通信协议的实现,具体代码比较复杂,三言两句也实在难表达清楚,网上已有很多关于iOS XMPP协议的讲 ...
- java 测试:iterator foreach for 三种迭代方式哪种更快?
代码: public class main { public static void main(String[] p_args){ ArrayList<String> _l_string ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
- C#编写windows服务
项目要求: 数据库用有一张表,存放待下载文件的地址,服务需要轮训表将未下载的文件下载下来. 表结构如下: 过程: VS--文件-->新建项目-->windows-->windows服 ...
- codeforces 360 C
C - NP-Hard Problem Description Recently, Pari and Arya did some research about NP-Hard problems and ...
- Codeforces Round #361 (Div. 2) A
A - Mike and Cellphone Description While swimming at the beach, Mike has accidentally dropped his ce ...
- Github+Jekyll —— 创建个人免费博客(一)从零开始
摘要: 本文中我将介绍一下如何在github上搭建个人Blog(博客),也顺便让我们掌握一下github Pages功能,另外还涉及到Jekyll技术. ======================= ...