理解和運用php中的多態性(php用哪幾種形式實現多態)

本文目錄一覽:

PHP是什麼

PHP(PHP:Hypertext Preprocessor遞歸縮寫)中文名字是:“超文本預處理器”,是一種廣泛使用的通用開源腳本語言,適合於Web網站開發,它可以嵌入HTML中。編程范型是面向對象、命令式編程的,截止2019年4月24日為止,最新的版本是PHP 5.6.0(28 Aug 2014),其操作的系統為windows/linux/Mac跨平台。

擴展資料:

PHP的功能

1、創建博客

使用PHP創建博客wordpres,可以輕鬆創建博客。即使您不具備PHP知識,也可以使用它,但如果您可以編寫PHP,則可以自定義您的博客並創建主題。

2、網站開發

60%全球互聯網網站採用php技術,80%國內互聯網網站使用php開發。這些網站包含購物網站,政府企業網站,QQ空間,論壇博客等等。

3、移動端微網站開發以及小程序

移動設備的普及為移動互聯網的快速發展奠定了基礎!手機淘寶網站,手機京東網站等等, 微信公眾號應用中的微網站。

參考資料來源:百度百科——PHP

php oop的作用

oop是面向對象編程(設計) 面向對象程序設計(英語:Object Oriented Programming,縮寫:OOP),指一種程序設計范型,同時也是一種程序開發的方法論。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。基本理論

一項由 Deborah J. Armstrong 進行的長達40年之久的計算機著作調查顯示出了一系列面向對象程序設計的基本理論。它們是:

類(Class)定義了一件事物的抽象特點。通常來說,類定義了事物的屬性和它可以做到的(它的行為)。舉例來說,”狗”這個類會包含狗的一切基礎特徵,例如它的孕育、毛皮顏色和吠叫的能力。類可以為程序提供模版和結構。一個類的方法和屬性被稱為”成員”。 我們來看一段偽代碼:

類狗 開始 私有成員: 孕育 毛皮顏色 公有成員: 吠叫() 結束

在這串代碼中,我們聲明了一個類,這個類具有一些狗的基本特徵。關於公有成員和私有成員,請參見下面的繼承性一節。

對象

對象(Object)是類的實例。例如,”狗”這個類列舉狗的特點,從而使這個類定義了世界上所有的狗。而萊絲這個對象則是一條具體的狗,它的屬性也是具體的。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的。因此,萊絲就是狗這個類的一個實例。一個具體對象屬性的值被稱作它的”狀態”。

假設我們已經在上面定義了狗這個類,我們就可以用這個類來定義對象:

定義萊絲是狗 萊絲.毛皮顏色:=棕白色 萊絲.吠叫()

我們無法讓狗這個類去吠叫,但是我們可以讓對象”萊絲”去吠叫,正如狗可以吠叫,但沒有具體的狗就無法吠叫。

方法

方法(Method)是一個類能做的事情,但方法並沒有去做這件事。作為一條狗,萊絲是會吠叫的,因此”吠叫()”就是它的一個方法。與此同時,它可能還會有其它方法,例如”坐下()”,或者”吃()”。 對一個具體對象的方法進行調用並不影響其它對象,正如所有的狗都會叫,但是你讓一條狗叫不代表所有的狗都叫。 如下例:

定義萊絲是狗 定義泰爾是狗 萊絲.吠叫()

則泰爾是不會吠叫的,因為這裡的吠叫只是對對象”萊絲”進行的。

消息傳遞機制

一個對象通過接受消息、處理消息、傳出消息或使用其他類的方法來實現一定功能,這叫做消息傳遞機制(Message Passing)。

繼承性

繼承性(Inheritance)是指,在某種情況下,一個類會有”子類”。子類比原本的類(稱為父類)要更加具體化,例如,”狗”這個類可能會有它的子類”牧羊犬”和”奇瓦瓦犬”。在這種情況下,”萊絲”可能就是牧羊犬的一個實例。子類會繼承父類的屬性和行為,並且也可包含它們自己的。我們假設”狗”這個類有一個方法叫做”吠叫()”和一個屬性叫做”毛皮顏色”。它的子類(前例中的牧羊犬和奇瓦瓦犬)會繼承這些成員。這意味着程序員只需要將相同的代碼寫一次。 在偽代碼中我們可以這樣寫:

類牧羊犬:繼承狗 定義萊絲是牧羊犬 萊絲.吠叫() /* 注意這裡調用的是狗這個類的吠叫屬性。 */

回到前面的例子,”牧羊犬”這個類可以繼承”毛皮顏色”這個屬性,並指定其為棕白色。而”奇瓦瓦犬”則可以繼承”吠叫()”這個方法,並指定它的音調高於平常。子類也可以加入新的成員,例如,”奇瓦瓦犬”這個類可以加入一個方法叫做”顫抖()”。設若用”牧羊犬”這個類定義了一個實例”萊絲”,那麼萊絲就不會顫抖,因為這個方法是屬於奇瓦瓦犬的,而非牧羊犬。事實上,我們可以把繼承理解為”是”。例如,萊絲”是”牧羊犬,牧羊犬”是”狗。因此,萊絲既繼承了牧羊犬的屬性,又繼承了狗的屬性。 我們來看偽代碼:

類奇瓦瓦犬:繼承狗 開始 公有成員: 顫抖() 結束 類牧羊犬:繼承狗 定義萊絲是牧羊犬 萊絲.顫抖() /* 錯誤:顫抖是奇瓦瓦犬的成員方法。 */

當一個類從多個父類繼承時,我們稱之為”多重繼承”。多重繼承並不總是被支持的,因為它很難理解,又很難被好好使用。

封裝性

具備封裝性(Encapsulation)的面向對象程序設計隱藏了某一方法的具體執行步驟,取而代之的是通過消息傳遞機制傳送消息給它。因此,舉例來說,”狗”這個類有”吠叫()”的方法,這一方法定義了狗具體該通過什麼方法吠叫。但是,萊絲的朋友蒂米並不需要知道它到底如何吠叫。 從實例來看:

/* 一個面向過程的程序會這樣寫: */

定義萊絲 萊絲.設置音調(5) 萊絲.吸氣() 萊絲.吐氣() /* 而當狗的吠叫被封裝到類中,任何人都可以簡單地使用: */ 定義萊絲是狗 萊絲.吠叫()

封裝是通過限制只有特定類的實例可以訪問這一特定類的成員,而它們通常利用接口實現消息的傳入傳出。舉個例子,接口能確保幼犬這一特徵只能被賦予狗這一類。通常來說,成員會依它們的訪問權限被分為3種:公有成員、私有成員以及保護成員。有些語言更進一步:Java可以限制同一包內不同類的訪問;C#和VB.NET保留了為類的成員聚集準備的關鍵字:internal(C#)和Friend(VB.NET);Eiffel語言則可以讓用戶指定哪個類可以訪問所有成員。

多態性

多態性(Polymorphism)指方法在不同的類中調用可以實現的不同結果。因此,2個甚至更多的類可以對同一消息作出不同的反應。舉例來說,狗和雞都有”叫()”這一方法,但是調用狗的”叫()”,狗會吠叫;調用雞的”叫()”,雞則會啼叫。 我們將它體現在偽代碼上:

類狗 開始 公有成員: 叫() 開始 吠叫() 結束 結束 類雞 開始 公有成員: 叫() 開始 啼叫() 結束 結束 定義萊絲是狗 定義魯斯特是雞 萊絲.叫() 魯斯特.叫()

這樣,同樣是叫,萊絲和魯斯特做出的反應將大不相同。多態性的概念可以用在運算符重載上,本文不再贅述。

抽象性

抽象(Abstraction)是簡化複雜的現實問題的途徑,它可以為具體問題找到最恰當的類定義,並且可以在最恰當的繼承級別解釋問題。舉例說明,萊絲在大多數時候都被當作一條狗,但是如果想要讓它做牧羊犬做的事,你完全可以調用牧羊犬的方法。如果狗這個類還有動物的父類,那麼你完全可以視萊絲為一個動物。

OOP名詞釋意

編程范型 對於OOP的準確定義及其本意存在着不少爭論。

通常,OOP被理解為一種將程序分解為封裝數據及相關操作的模塊而進行的編程方式。有別於其它編程方式,OOP中的與某數據類型相關的一系列操作都被有機地封裝到該數據類型當中,而非散放於其外,因而OOP中的數據類型不僅有着狀態,還有着相關的行為。OOP理論,及與之同名的OOP實踐相結合創造出了新的一個編程架構;OOP思想被廣泛認為是非常有用的,以致一套新的編程范型被創造了出來。(其它的編程范型例如函數式編程或過程序編程專註於程序運行的過程,而邏輯編程專註於引發程序代碼執行的斷言)

對面向模擬系統的語言(如:SIMULA 67)的研究及對高可靠性系統架構(如:高性能操作系統和CPU的架構)的研究最終導致了OOP的誕生。

一些專家認為Object-Orientation中的Object的本意來自於其在語法領域的意義,即應將其理解為”賓語”或”操作對象”,而非一般的”對象”或”對象”。我們所見到的軟件的運行請求通常都是Subject-Oriented的,即”面向主語的”或”面向操作者的”,然而這樣將使得對操作者對象的設計變得困難而複雜。有鑒於此,部分研究人員開始了對”面向操作對象”的思考。這又一次產生了新的編程范型,這是前邊提到的”面向操作者”的思考模式的一項革新。

依照”面向操作對象”的原則,在程序語句中的動詞應該被劃分到操作對象的類型之中,而與該動詞請求相關的邏輯關係也就因此將在操作對象中處理。以下是採用”面向操作對象”的方式翻譯”面向操作者”的一些例子:

面向操作者:銷售系統保存交易記錄。

面向操作對象:交易記錄在接受到銷售系統的一條請求消息後將自身保存。

面向操作者:銷售系統打印收據。

面向操作對象:收據在接收到銷售系統的一條請求消息後將自身打印。

面向對象的語言

支持部分或絕大部分面向對象特性的語言即可稱為基於對象的或面向對象的語言。早期,完全面向對象的語言主要包括Smalltalk等語言,目前較為流行的語言中有Java、C#、Eiffel等。隨着軟件工業的發展,比較早的面向過程的語言在近些年的發展中也紛紛吸收了許多面向對象的概念,比如C-C++,BASIC-Visual Basic-Visual Basic .NET,Pascal-Object Pascal,Ada-Ada95。

歷史

對象和實例的最早概念出自麻省理工大學的PDP-1系統。這一系統大概是capability based architecture的最早示例。另一個早期的事例是1963年Ivan Sutherland開發的Sketchpad;但是,這並非是一種編程思想,而只是一個程序。

對象最早在20世紀60年代的Simula 67中被引入程序設計中。Simula這一語言是Ole-Johan Dahl和Kristen Nygaard在奧斯陸計算機中心為模擬環境而設計的。(據說,他們是為了模擬船隻而設計的這種語言,並且對不同船隻間屬性的相互影響感興趣。他們將不同的船隻歸納為不同的類,而每一個對象,基於它的類,可以定義它自己的屬性和行為。)這種辦法是分析式程序的最早概念體現。在分析式程序中,我們將真實世界的對象映射到抽象的對象,這叫做”模擬”。Simula不僅引入了”類”的概念,還應用了實例這一思想–這可能是這些概念的最早應用。20世紀70年代施樂PARC研究所發明的Smalltalk語言將面向對象程序設計的概念定義為,在基礎運算中,對對象和消息的廣泛應用。Smalltalk的創建者深受Simula 67的主要思想影響,但Smalltalk中的對象是完全動態的–它們可以被創建、修改並銷毀,這與Simula中的靜態對象有所區別。此外,Smalltalk還引入了繼承性的思想,它因此一舉超越了不可創建實例的程序設計模型和不具備繼承性的Simula。

此外,Simula 67的思想亦被應用在許多不同的語言,如Lisp、Pascal。

面向對象程序設計在80年代成為了一種主導思想,這主要應歸功於C++–C語言的擴充版。在圖形用戶界面(GUI)日漸崛起的情況下,面向對象程序設計很好地適應了潮流。GUI和面向對象程序設計的緊密關聯在Mac OS X中可見一斑。Mac OS X是由面向對象C語言寫成的,這一語言是一個仿Smalltalk的C語言擴充版。面向對象程序設計的思想也使事件處理式的程序設計更加廣泛被應用(雖然這一概念並非僅存在於面向對象程序設計)。一種說法是,GUI的引入極大地推動了面向對象程序設計的發展。

在ETH Zürich(英文),Niklaus Wirth 和他的同事們對抽象數據和模塊化程序設計進行了調查。Mudula-2將這些都包括了進去,而Oberon則包括了一種特殊的面向對象方法–不同於Smalltalk與C++。

面向對象的特性也被加入了當時較為流行的語言:Ada、BASIC、Lisp、Fortran、Pascal以及種種。由於這些語言最初並沒有面向對象的設計,故而這種糅合常常會導致兼容性和維護性的問題。與之相反的是,”純正的”面向對象語言卻缺乏一些程序員們賴以生存的特性。在這一大環境下,開發新的語言成為了當務之急。作為先行者,Eiffel成功地解決了這些問題,並成為了當時較受歡迎的語言。在過去的幾年中,Java語言成為了廣為應用的語言,除了它與C和C++語法上的近似性。Java的可移植性是它的成功中不可磨滅的一步,因為這一特性,已吸引了龐大的程序員群的投入。

近日,一些既支持面向對象程序設計,又支持面向過程程序設計的語言悄然浮出水面。它們中的佼佼者有Python、Ruby等等.

正如面向過程程序設計使得結構化程序設計的技術得以提升,現代的面向對象程序設計方法使得對設計模式的用途、契約式設計和建模語言(如UML)技術也得到了一定提升。

腳本中的OOP

近年來,面向過程程序設計越發流行於腳本語言。Python和Ruby是建立在OOP原理的腳本語言,Perl和PHP亦分別在Perl 5和PHP 4時加入面向過程特性。

PHP多態代碼實例

這篇文章主要介紹了PHP多態代碼實例,本文用2個代碼實例來演示PHP中的多態,需要的朋友可以參考下

多態定義:只關心一個接口或者基類,而不關心一個對象的具體類。(同一類型,不同結果)

這裡兩個例子:

第一個,我們發現,基類定義了標準,子類進行了自我規則的實現。這是多態的一個要求。同時,這是滿足重寫;實際上這是不同類的不同表現;沒有嚴格滿足一個接口,或者基類編程。因為你調用的時候不是

stu-showGrade()

而是各自自己的方法;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

class

stu{

public

function

showGrade(){

echo

base

class;

}

}

class

xiaomin

extends

stu{

public

function

showGrade(){

echo

is

son

show

80;

}

}

class

xiaoli

extends

stu{

public

function

showGrade(){

echo

is

son

show

60;

}

}

function

doit($obj){

if(get_class($obj)

!=

stu){

$obj-showGrade();

}

}

doit(new

xiaoli());

doit(new

xiaomin());

第二個例子:dovoice

參數規定了$obj

為animal,意識就是用接口

接受了

實現類對象。了向上轉型。這就符合同一類型,不同結果了,這就是多態;

實際上在Java中

會是

animal

a

=

new

dog();這樣子的;因為PHP

是若類型語言。沒有對象轉型機制。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

interface

animal{

public

function

voice();

}

class

cat

implements

animal{

public

function

voice(){

echo

miao~~~br;

}

}

class

dog

implements

animal{

public

function

voice(){

echo

wang

~~~br;

}

}

function

dovoice(animal

$obj){

$obj-voice();

}

dovoice(new

dog());

dovoice(new

cat());

php中什麼是多態?

多態就是同一個行為,作用不同的對象返回的結果不一樣,這個用處挺大的

PHP真的能算是面向對象的語言嗎?

面向對象三大特性:封裝,繼承,多態

php可以封裝對象,也可以繼承,同樣可以實現多態

多態是指指出重寫和重載,php子類可以重寫父類的方法,也可以通過方法的參數數量不同來重載方法,我覺得是面向對象語言

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237576.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:05
下一篇 2024-12-12 12:05

相關推薦

  • Python數據類型分為哪幾種

    Python作為一門非常靈活的編程語言,有着非常豐富的數據類型。Python的數據類型可以分為數字類型、字符串類型、列表類型、元組類型、字典類型和集合類型六種。 一、數字類型 Py…

    編程 2025-04-29
  • JavaScript創建對象的幾種方式詳解

    JavaScript是一門用於在網頁上實現動態交互效果的編程語言,對於前端開發而言,掌握JavaScript創建對象的幾種方式是必備技能之一。在本文中,我們將從多個方面詳細闡述Ja…

    編程 2025-04-24
  • Python繼承和多態

    一、繼承 繼承是面向對象編程的一個重要概念,它允許我們創建一個新的類從已存在的類中繼承屬性和方法。子類可以使用它從父類繼承的方法和屬性,也可以對其進行修改和擴展。這樣可以避免重複編…

    編程 2025-04-24
  • MySQL備份的幾種方式及實現

    一、mysqldump備份 1、mysqldump工具是MySQL自帶的備份工具,它可以導出MySQL數據庫的結構和數據,利用導出後的.sql文件進行備份還原操作。備份時可以選擇備…

    編程 2025-02-15
  • 多態的三種表現形式

    多態是面向對象的重要概念之一,在Java等編程語言中得到了廣泛的應用。多態主要指同一個方法或者類在不同的環境下呈現出不同的行為表現形式。根據Java中多態的表現形式不同,可以將其分…

    編程 2025-02-05
  • 解決跨域問題的幾種辦法

    一、利用Jsonp Jsonp是一種利用標籤實現跨域傳輸數據的方法。在ajax跨域請求時,json數據通過回調函數的方式傳遞迴來,從而實現跨域數據傳輸。 function json…

    編程 2025-01-27
  • Java封裝繼承多態的理解

    一、封裝 封裝是面向對象編程中的重要概念之一,它使得對象的屬性與行為被保護在對象內部,只能通過對象提供的接口來訪問。 Java中實現封裝的方式是使用訪問控制修飾符:public、p…

    編程 2025-01-20
  • java中多態,java中多態的實現原理

    本文目錄一覽: 1、java中多態是什麼意思? 2、北大青鳥設計培訓:java多態的總結? 3、java中多態具體是什麼??? 4、java中多態性什麼意思? java中多態是什麼…

    編程 2025-01-16
  • java實例化對象,java實例化對象的幾種方式

    本文目錄一覽: 1、java怎麼判斷單例模式創建的對象是同一個 2、java:類的實例化就是用類創建對象嗎? 3、在JAVA中關於循環實例化類的對象問題 4、java怎麼實例化st…

    編程 2025-01-16
  • php如何判斷來路並進行跳轉(請簡述php中的幾種跳轉語句以及各自的特點)

    本文目錄一覽: 1、PHP頁面怎麼實現多條件判斷後跳轉? 2、php中判斷網頁來路並實現跳轉的方法 3、php如何將來路網站進行跳轉 4、php怎麼if判斷後跳轉到某個頁面 5、p…

    編程 2025-01-16

發表回復

登錄後才能評論