多態(tài)性是指相同的操作或函數(shù)、過(guò)程可作用于多種類(lèi)型的對(duì)象上并獲得不同的結(jié)果。不同的對(duì)象,收到同一消息將可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱(chēng)為多態(tài)性。
多態(tài)性允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng)了軟件的靈活性和重用性。
一、什么是多態(tài)?
多 態(tài)(Polymorphism)按字面上意思理解就是“多種形狀”。可以理解為多種表現(xiàn)形式,也即“一個(gè)對(duì)外接口,多個(gè)內(nèi)部實(shí)現(xiàn)方法”。在面向?qū)ο蟮睦碚?中,多態(tài)性的一般定義為:同一個(gè)操作作用于不同的類(lèi)的實(shí)例,將產(chǎn)生不同的執(zhí)行結(jié)果。也即不同類(lèi)的對(duì)象收到相同的消息時(shí),將得到不同的結(jié)果。
在實(shí)際的應(yīng)用開(kāi)發(fā)中,采用面向?qū)ο笾械亩鄳B(tài)主要在于可以將不同的子類(lèi)對(duì)象都當(dāng)作一個(gè)父類(lèi)來(lái)處理,并且可以屏蔽不同子類(lèi)對(duì)象之間所存在的差異,寫(xiě)出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。
二、多態(tài)的應(yīng)用設(shè)計(jì)
在實(shí)際的應(yīng)用開(kāi)發(fā)中,通常為了使項(xiàng)目能夠在以后的時(shí)間里的輕松實(shí)現(xiàn)擴(kuò)展與升級(jí),需要通過(guò)繼承實(shí)現(xiàn)可復(fù)用模塊進(jìn)行輕松升級(jí)。在進(jìn)行可復(fù)用模塊設(shè)計(jì)時(shí),就需要盡可能的減少使用流程控制語(yǔ)句。此時(shí)就可以采用多態(tài)實(shí)現(xiàn)該類(lèi)設(shè)計(jì)。
舉例:
class painter{ //定義油漆工類(lèi) public function paintbrush(){ //定義油漆工動(dòng)作 echo "油漆工正在刷漆!n"; } } class typist{ //定義打字員類(lèi) public function typed(){ //定義打字員工作 echo "打字員正在打字!n"; } } function printworking($obj){ //定義處理類(lèi) if($obj instanceof painter){ //若對(duì)象是油漆工類(lèi),則顯示油漆工動(dòng)作 $obj->paintbrush(); }elseif($obj instanceof typist){ //若對(duì)象是打字員類(lèi),則顯示打字員動(dòng)作 $obj->typed(); }else{ //若非以上類(lèi),則顯示出錯(cuò)信息 echo "Error: 對(duì)象錯(cuò)誤!"; } } printworking(new painter()); //顯示員工工作 printworking(new typist()); //顯示員工工作
分析:在上述程序中,首先定義兩個(gè)員工類(lèi):油漆工類(lèi)和打字員類(lèi)。然后定義一個(gè)處理函數(shù),在該函數(shù)中,判斷員工是否為已經(jīng)定義的員工,打印出員工的工作狀態(tài)。其結(jié)果如下所示。
油漆工正在刷漆
打字員正在打字
從以上程序可輕松看出,若想顯示其幾種員工的工作狀態(tài),需要首先定義該員工類(lèi),并在該員工類(lèi)中定義員工的工作,然后在printworking()函數(shù)中增加elseif語(yǔ)句以檢查對(duì)象是哪一員工類(lèi)的實(shí)例。這在實(shí)際的應(yīng)用中,是非常不可取的。若此時(shí)采用多態(tài),則可以輕松解決此問(wèn)題。
以上就是php多態(tài)性如何理解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注其它相關(guān)文章!