php中多態性與動態綁定詳解介紹
什麼是多態性?
多態性是繼資料抽象化和繼承後,物件導向語言的第三個特徵。從字面上理解,多態的意思是“多種形態”,簡單來說,多態是具有表現多種形態的能力的特徵,在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中多態性與動態綁定詳解介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、
