新葡亰496net 新葡亰编程 PHP5.0对象模型探索之抽象方法和抽象类_php基础_脚本之家

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

面向对象程序通过类的道岔构造构建起来,在单重继承语言如PHP中,类的三番六遍是树状的.
多个根类有叁个或更加多的子类,再从每一种子类世袭出八个或更加多下顶级子类。当然,恐怕存在两个根类,用来兑现不一样的作用。在三个能够设计的系统中,种种根类都应当有叁个得力的接口,
能够被利用代码所选用。假使大家的运用代码被设计成与根类一同坐班,那么它也得以和此外一个从根类世袭出来的子类同盟。

架空方法是就如子类中貌似的点子的占位符,它与经常方法不相同—未有其他代码。如果类中留存一个或越多抽象方法,
那么这一个类就成了抽象类。你无法实例化抽象类.
你必得继续它们,然后实例化子类,你也得以把抽象类看成是子类的一个模板。

一经你覆写全部的架空方法,子类就产生叁个见惯不惊的类。若无覆写全体办法,
子类仍然为指雁为羹的. 要是四个类中中包括有抽象方法,
你必得注脚那几个类是空虚的, 在class关键字前加上abstract。

扬言抽象方法的语法与声美赞臣(Meadjohnson卡塔尔国(BeingmateState 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(); //定义一个虚无方法 }

//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(State of Qatar //覆写计算面积方法 { return(($this->base *
$this->height)/2); }

public function getNumberOfSides(State of Qatar //覆写边数总括划办公室法 { 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; }

?>

标签:

相关文章

发表评论

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

网站地图xml地图