激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP5多態性與動態綁定介紹

PHP5多態性與動態綁定介紹

2020-09-16 16:47PHP教程網 PHP教程

這篇文章主要介紹了PHP5多態性與動態綁定介紹,本文主要講解了什么是多態性和什么是動態綁定,并給出相應實例,需要的朋友可以參考下

什么是多態性?

多態性是繼數據抽象和繼承后,面向對象語言的第三個特征。從字面上理解,多態的意思是“多種形態”,簡單來說,多態是具有表現多種形態的能力的特征,在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 是一種動態語言,使用動態綁定。無須考慮采取何種綁定策略,因為一起都是自動的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩黄色一区 | 一级免费黄色免费片 | 99视频在线观看视频 | 色综av | freexxx69性欧美hd | 国产一级一区二区三区 | 黄色毛片免费视频 | 国产一区二区三区视频在线观看 | 91福利在线观看 | 91资源在线观看 | 成人午夜毛片 | 成人精品免费在线观看 | 久久久久久久久浪潮精品 | 精品国产看高清国产毛片 | 亚洲成人免费影视 | 久久福利国产 | 日韩视频一区在线 | 国产电影av在线 | 亚洲天堂中文字幕在线观看 | 国产亚洲高清视频 | 久久精品日产第一区二区三区 | 国产精品一区二区免费在线观看 | 久久久久久久久久综合 | 久久免费视频一区二区三区 | 免费在线观看亚洲 | 欧美精品日日鲁夜夜添 | 欧美一区二区黄 | 草碰人人 | 久久亚洲春色中文字幕久久 | 中国的免费的视频 | 午夜精品久久久久久久96蜜桃 | 99久久自偷自偷国产精品不卡 | 国内久久久久 | 日韩在线观看免费 | 国产精品高潮99久久久久久久 | 激情综合网俺也去 | 国产成人77亚洲精品www | 黄色视屏免费在线观看 | 成人一级视频 | 中文字幕在线观看国产 | 日本免费一区二区三区四区 |