PHP5.0对象模型探索之抽象方法和抽象类_php基础_脚本之家

面向对象程序通过类的分层布局营造起来,在单重世襲语言如PHP中,类的继续是树状的.
一个根类有几个或越来越多的子类,再从各样子类世袭出三个或越来越多下一级子类。当然,也许存在多少个根类,用来完毕分歧的职能。在二个大好设计的种类中,每一种根类都应该有贰个可行的接口,
能够被应用代码所运用。就算我们的使用代码被设计成与根类一同工作,那么它也得以和此外二个从根类继承出来的子类合营。

空泛方法是有如子类中日常的办法的占位符,它与平常方法差别—未有任何代码。假诺类中设有一个或越来越多抽象方法,
那么这几个类就成了抽象类。你不可能实例化抽象类.
你必须世襲它们,然后实例化子类,你也能够把抽象类看成是子类的一个模板。

假如您覆写全部的悬空方法,子类就成为三个惯常的类。若无覆写全部办法,
子类仍为抽象的. 假诺贰个类中中蕴含有抽象方法,
你必得注解这些类是空虚的, 在class关键字前加上abstract。

扬言抽象方法的语法与声圣元(SynutraState of Qatar般方法不一致,抽象方法的从未有过像日常方法那样带有在大括号{}中的主体部份,并用分号;来了却。

在例子6.13中,大家定义了三个包括getArea方法的类Shape。但出于不领会形状不恐怕显著图形的面积,确良大家注解了getArea方法为架空方法。你无法实例化一个Shape对象,但你能够世袭它或在八个表达式中接纳它,好似例6.13中那样。

固然您创设了三个唯有空虚方法的类,你就定义了二个接口。为了验证这种境况,PHP中有interface
和implements关键字。你能够用interface来代表抽象类,用implements来替代extends来注脚你的类定义或选择一个接口,比如,
你能够写四个myClass implements myIterface.
那三种方式能够依个人偏爱来筛选。

/*注: 三种艺术即指:1. abstract class aaa{} class bbb extends aaa{} 2.
interface aaa{}class bbb implements aaa{} */

Listing 6.13 Abstract classes

//abstract root class 抽象根类 abstract class Shape { abstract function
getArea(State of Qatar; //定义三个空洞方法 }

//abstract child class 抽象子类 abstract class Polygon extends Shape
//多边形 { abstract function getNumberOfSides(State of Qatar; }

//concrete class 实体类 三角形类 class Triangle extends Polygon { public
$base; public $height;

public function getArea(卡塔尔 //覆写总括面积方法 { return(($this->base *
$this->height)/2); }

public function getNumberOfSides(卡塔尔 //覆写边数计算情势 { return; } }

//concrete class 实体类四边形 class Rectangle extends Polygon { public
$width; public $height;

public function getArea() { return($this->width * $this->height); }

public function getNumberOfSides; } }

//concrete class 实体类 圆形 class Circle extends Shape { public
$radius;

public function getArea * $this->radius * $this->radius); } }

//concrete root class 定义二个颜色类 class Color { public $name; }

$myCollection = array(卡塔尔; //建立形状的集纳,归入数组

//make a rectangle $r = new Rectangle; $r->width = 5; $r->height = 7;
$myCollection[] = $r; unset;

//make a triangle $t = new Triangle; $t->base = 4; $t->height = 5;
$myCollection[] = $t; unset;

//make a circle $c = new Circle; $c->radius = 3; $myCollection[] =
$c; unset;

//make a color $c = new Color; $c->name = “blue”; $myCollection[] =
$c; unset;

foreach { if //若是$s是Shape类的实例 { print(“Area: ” . $s->getArea; }

if($s instanceof Polygon) { print(“Sides: ” .$s->getNumberOfSides; }

if { print; }

print; }

?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注