抽象方法、接口、继承、多态、图形计算器

//抽象方法------------------------------
abstract
     Person.class.php
     <?php 
//抽象类和抽象方法
abstract class Person{
    public $name;
    //定义抽象方法
    abstract function say();
    function walk(){

    }
}
//$p = new Person; //抽象类不让被实例化

class Student extends Person{
    function say(){

    }
}
//接口------------------------------
interface
    USB.class.php
    Mouses.class.php
    Person.class.php
//USB.class.php------------------------------
<?php 
/*
 * 1、定义接口USB,在接口中有如下抽象方法
* start,stop,run,
定义子类Mouses,继承接口USB.
*/
interface USB{
    function start();
    function run();
    function stop();
}
// Mouses.class.php----------------------------
<?php
include 'USB.class.php'; 
//继承接口USB
class Mouses implements USB{
    function start(){

    }
    function run(){

    }
    function stop(){

    }
}
//Person.class.php------------------------------
<?php 
//接口应用举例
interface Person{
    //接口中不能有普通的成员方法和成员属性。仅能有常量
    //和抽象方法
    const COUNTRY="china";  
    function say();
}
//接口对于接口的继承
interface Test extends Person{

}
//类对于接口的继承
class Student implements Person{
    function say(){

    }
}
//多态举例------------------------------
USB.class.php
<?php 
header("Content-Type:text/html;charset=utf-8");
//定义接口类
interface USB{
    function start();

    function run();

    function stop();
}

//定义鼠标类,继承USB接口
class Mouses implements  USB{
    function start(){
        echo "我是鼠标,我正在加载<br/>";
    }

    function run(){
        echo "我是鼠标,我正在运行<br/>";
    }

    function stop(){
        echo "我是鼠标,我正在停止<br/>";
    }
}
//添加继承了USB接口的设备 fan
class Fan implements USB{
    function start(){
        echo "我是风扇,我正在加载<br/>";
    }

    function run(){
        echo "我是风扇,我正在运行<br/>";
    }

    function stop(){
        echo "我是风扇,我正在停止<br/>";
    }
}

//定义电脑类,应用鼠标类
class Computer{
    function useUsb(USB $u){
        //假设 $u是继承了USB接口的类对象
        /*if($u instanceof USB){
            $u->start();
            $u->run();
            $u->stop();
        }else{
            echo "非USB设备";
        }*/     
        $u->start();
        $u->run();
        $u->stop();
    }
}

//定义工人类,将电脑和鼠标结合在一起
class Worker{
    function getWork(){
        $c = new Computer();
        $m = new Mouses();
        //实例化风扇类
        $f = new Fan();
        $c->useUsb($m);
        $c->useUsb($f);
    }
}
$w = new Worker();
$w->getWork();

图形计算器
    index.php
    Shape.class.php
    Rectangle.class.php
    Circle.class.php
    Tra.class.php
//index.php------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>图形计算器</title>
</head>


<body>
<center>图形计算器</center><br/><br/>
<a href='index.php?action=Rectangle'>矩形</a> | <a href='index.php?action=Tra'>三角形</a> | <a href='index.php?action=Circle'>圆形</a>  
<?php
//自动加载类
function __autoload($classname){
    //$classname=Rectangle
    include $classname.'.class.php';
}
//实例化矩形类
//获取类名称
$cname = isset($_GET['action'])?$_GET['action']:"";
if($cname!=""){
    //若用户选择计算矩形
     //cname=Rectangle
     //实例化矩形类
     //$cname 等于类名称
     $obj = new $cname();
     //输出表单
     $obj->view();
     //当用户POST数据后可以开始计算
     if($_POST){
           /*
            * 当用户POST数据以后,就获取到长和宽
            * 此时再次实例化Rectangle类给构造方法
            * 长和宽           
            */        
         $obj = new $cname($_POST);
         echo $obj->name."的周长:".$obj->cir();
         echo "<br/>";
         echo $obj->name."的面积:".$obj->area();

     }
}else{
    //若cname为空,则说明用户没有选中图形,此时给提示
    echo "<br/>请选择要计算的图形";
}

?>

</body>
</html>

//Shape.class.php------------------------------
<?php 
abstract class Shape{
    //要求继承抽象类Shape的子类都必须完成计算周长
    abstract function cir();

    //要求继承抽象类Shape的子类都必须完成计算面积
    abstract function area();

    //要求继承抽象类Shape的子类都必须完成输出表单
    abstract function view();

}
//Rectangle.class.php------------------------------
<?php 
//矩形类,完成矩形的周长,面积,表单
class Rectangle extends Shape{
    //声明成员属性长和宽,用于计算
    public $name="矩形";
    public $width;
    public $height;

    //定义构造方法,给成员属性赋初值
    function __construct($array=array()){
        if(!empty($array)){
            $this->width = $array['width'];
            $this->height = $array['height'];
        }
    }

    //重载父类Shape类中的成员方法cir,计算矩形的周长
    function cir(){
        //(长+宽)*2
        $zc = ($this->height+$this->width)*2;
        return $zc;        
    }

    //由于Rectangle类继承了Shape类,必须重载Shape
    //类中的全部抽象成员方法 area
    function area(){
        //面积= 长*宽
        $mj = $this->height*$this->width;
        return $mj;
    }

    //重载 view()
    function view(){
        //输出表单
        echo "<form action='index.php?action=Rectangle' method='post'>";
        echo $this->name."的宽:<input type='text' name='width' /><br/><br/>";
        echo $this->name."的高:<input type='text' name='height' /><br/><br/>";
        echo "<input type='submit' value='计算' />";      
        echo "</form>";
    }
} 

//Circle.class.php------------------------------
<?php 
class Circle extends Shape{
    //定义成员属性
    public $r; //半径
    public $name = "圆形";  

    //定义构造方法 给成员属性赋初值
    function __construct($array=array()){
        //仅当$array不为空时,才给成员属性
        //$this->r赋初值
        if(!empty($array)){
            $this->r = $array['r'];
        }
    }



    //Circle继承了Shape类。则Circle必须重载Shape类
    //中的抽象成员方法
    function cir(){
        //圆的周长=2*pi()*r
         $zc = 2*pi()*$this->r;
         return $zc;
    }


    function area(){
        $mj = pi()*$this->r*$this->r;
        return $mj;
    }

    function view(){
        //输出表单
        echo "<form action='' method='post'>";
        echo $this->name."的半径:<input type='text' name='r' /><br/><br/>";       
        echo "<input type='submit' value='计算' />";
        echo "</form>";
    }
}

//Tra.class.php------------------------------
<?php 
//定义三角形类
class Tra extends Shape{
    public $name="三角形";
    public $bian1; //三角形的三条边之一
    public $bian2;
    public $bian3;

    //定义构造方法 给成员属性赋初值
    function __construct($array=array()){
        if(!empty($array)){
            //当数组$array非空,也就是有POST值时才开始赋值          
            $this->bian1 = $array['bian1'];
            $this->bian2 = $array['bian2'];
            $this->bian3 = $array['bian3'];
        }
    }


    //在三角形类中重载抽象类Shape中的抽象成员方法
    function cir(){
        //三角形的周长=边1+边2+边3
        $zc = $this->bian1+$this->bian2+$this->bian3;
        return $zc;
    }

    //继承Shape类中的抽象成员方法area.
    function area(){
        //计算三角形的面积 海伦公式
        $p = ($this->bian1+$this->bian2+$this->bian3)/2;
        $mj = sqrt($p*($p-$this->bian1)*($p-$this->bian2)*($p-$this->bian3));
        return $mj;
    }

    //继承Shape类,重载Shape类中的全部抽象方法,重载function view()
    function view(){
        //输出表单
        echo "<form action='' method='post'>";
        echo $this->name."的边1:<input type='text' name='bian1' /><br/><br/>";
        echo $this->name."的边2:<input type='text' name='bian2' /><br/><br/>";
        echo $this->name."的边3:<input type='text' name='bian3' /><br/><br/>";
        echo "<input type='submit' value='计算' />";
        echo "</form>";
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值