国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP5多態性與動態綁定介紹

2020-03-22 17:48:05
字體:
來源:轉載
供稿:網友
什么是多態性?多態性是繼數據抽象和繼承后,html' target='_blank'>面向對象語言的第三個特征。從字面上理解,多態的意思是“多種形態”,簡單來說,多態是具有表現多種形態的能力的特征,在OO中是指“語言具有根據對象的類型以不同方式處理之,特別是重載方法和繼承類這種形式”的能力。多態被認為是面向對象語言的必備特性。例如:我們創建一個接口 Shape,定義一個空的方法 draw(),那么所有的實現類都必須實現這個方法,假設 Shape 有兩個實現類:Triangle 和 Rectangle,我們雖然無法通過類似這樣的 Java 代碼來詮釋 PHP 的多態性:
復制代碼 代碼如下:
Shape s = new Triangle();
s.draw();
不過 PHP5.1 中引入了 Type Hinting,可以限制函數(或者方法)的參數類型,我們使用這個特性來演示 PHP5 的多態性。參考如下的代碼:
復制代碼 代碼如下:
class TestPolymorphism {
public function drawNow(Shape $shape) {
$shape- draw();
}
}
函數 drawNow() 中限制傳入的參數類型必須為 Shape 接口派生類的對象,這里我們傳遞給 drawNow() 的參數可能是 Triangle 或者 Rectangle 的對象,也可能是其它的 Shape 接口的派生類對象,比如 Circle 等等,簡單的說 drawNow() 的參數類型是無法預知的,$shape- draw() 的行為最終由傳入的參數的具體類型來決定,比如如果傳入 Triangle 的對象,那么就調用 Triangle 的 draw() 方法,如果傳入 Rectangle 的對象,就調用 Rectangle 的 draw() 方法。這種在運行時刻根據傳遞的對象參數的類型來決定調用哪一個對象的方法的行為就可以稱之為多態。Shape 也可以是一個抽象基類或者是非抽象的基類,上面的論述都是成立的。區別在于接口僅定義一套實現類必須遵守的規則,而使用基類則可以為派生類提供一些缺省的行為。參考代碼如下:
復制代碼 代碼如下:
/**
* Shape Interface
*
* @version 1.0
* @copyright
*/
interface Shape {
public function draw();
}

/**
* Triangle
*
* @uses Shape
* @version 1.0
* @copyright
*/
class Triangle implements Shape {
public function draw() {
print "Triangle::draw()/n";
}
}

/**
* Rectangle
*
* @uses Shape
* @version 1.0
* @copyright
*/
class Rectangle implements Shape {
public function draw() {
print "Rectangle::draw()/n";
}
}

/**
* Test Polymorphism
*
* @version 1.0
* @copyright
*/
class TestPoly {
public function drawNow(Shape $shape) {
$shape- draw();
}
}


$test = new TestPoly();
$test- drawNow(new Triangle());
$test- drawNow(new Rectangle());

/* vim: set expandtab tabstop=4 shiftwidth=4: */
什么是動態綁定?HaoHappy 翻譯的 PHP5 Object Pattern 第九節中有介紹:除了限制訪問,訪問方式也決定哪個方法將被子類調用或哪個屬性將被子類訪問。 函數調用與函數本身的關聯,以及成員訪問與變量內存地址間的關系,稱為綁定。另有的說法:綁定(binding):將方法的調用連到方法本身被稱為綁定,當綁定發生在編譯期,被稱做靜態綁定,而在程序運行的時候根據對象的類型來決定該綁定方法的成為動態綁定。PHP 是一種動態語言,使用動態綁定。無須考慮采取何種綁定策略,因為一起都是自動的。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 溧阳市| 株洲县| 元阳县| 吴江市| 长宁县| 涿州市| 平遥县| 永仁县| 宣武区| 司法| 建瓯市| 芦山县| 正阳县| 西畴县| 山西省| 濮阳县| 政和县| 西青区| 昌吉市| 黄浦区| 石景山区| 晋州市| 新乡县| 涿州市| 开封县| 高雄市| 邮箱| 台安县| 都匀市| 河北区| 奇台县| 南丹县| 山丹县| 泊头市| 桃园市| 潞西市| 江城| 柳河县| 江门市| 德庆县| 麻城市|