《PHP應用:PHP5多態性與動態綁定介紹》要點:
本文介紹了PHP應用:PHP5多態性與動態綁定介紹,希望對您有用。如果有疑問,可以聯系我們。
PHP學習什么是多態性?
PHP學習多態性是繼數據抽象和繼承后,面向對象語言的第三個特征.從字面上理解,多態的意思是“多種形態”,簡單來說,多態是具有表現多種形態的能力的特征,在OO中是指“語言具有根據對象的類型以不同方式處理之,特別是重載辦法和繼承類這種形式”的能力.多態被認為是面向對象語言的必備特性.
PHP學習例如:
PHP學習我們創建一個接口 Shape,定義一個空的辦法 draw(),那么所有的實現類都必須實現這個辦法,假設 Shape 有兩個實現類:Triangle 和 Rectangle,我們雖然無法通過類似這樣的 Java 代碼來詮釋 PHP 的多態性:
代碼如下:
Shape s = new Triangle();
s.draw();
不過 PHP5.1 中引入了 Type Hinting,可以限制函數(或者辦法)的參數類型,我們使用這個特性來演示 PHP5 的多態性.
PHP學習參考如下的代碼:
代碼如下:
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() 辦法.這種在運行時刻根據傳遞的對象參數的類型來決定調用哪一個對象的辦法的行為就可以稱之為多態.
PHP學習Shape 也可以是一個抽象基類或者是非抽象的基類,上面的論述都是成立的.區別在于接口僅定義一套實現類必須遵守的規則,而使用基類則可以為派生類提供一些缺省的行為.
PHP學習參考代碼如下:
代碼如下:
/**
?* 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: */
PHP學習什么是動態綁定?
PHP學習HaoHappy 翻譯的 PHP5 Object Pattern 第九節中有介紹:
PHP學習除了限制拜訪,拜訪方式也決定哪個方法將被子類調用或哪個屬性將被子類拜訪. 函數調用與函數本身的關聯,以及成員拜訪與變量內存地址間的關系,稱為綁定.
PHP學習另有的說法:
PHP學習綁定(binding):將辦法的調用連到辦法本身被稱為綁定,當綁定發生在編譯期,被稱做靜態綁定,而在程序運行的時候根據對象的類型來決定該綁定辦法的成為動態綁定.
PHP學習PHP 是一種動態語言,使用動態綁定.無須斟酌采取何種綁定策略,因為一起都是自動的.
歡迎參與《PHP應用:PHP5多態性與動態綁定介紹》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/11132.html