//抽象方法------------------------------
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>";
}
}
抽象方法、接口、继承、多态、图形计算器
最新推荐文章于 2024-03-23 11:56:32 发布