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

来源:互联网 发布:linux程序设计pdf下载 编辑:程序博客网 时间:2024/05/01 19:26
//抽象方法------------------------------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----------------------------<?phpinclude 'USB.class.php'; //继承接口USBclass 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接口的设备 fanclass 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>";    }}
0 0
原创粉丝点击