多態(tài)性允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng) " /> 精品国产一二三,www.国产在线观看,国产精品久久777777毛茸茸

四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

深入php多態(tài)的實(shí)現(xiàn)詳解

多態(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)了軟件的靈活性和重用性。

在面向?qū)ο蟮能浖_(kāi)發(fā)中,多態(tài)性是最為重要的部分之一。面向?qū)ο缶幊滩⒉恢皇菍⑾嚓P(guān)的方法與數(shù)據(jù)簡(jiǎn)單的結(jié)合起來(lái),而是采用面向?qū)ο缶幊讨械母鞣N要素將現(xiàn)實(shí)生活中的各種情況清晰的描述出來(lái)。這一小節(jié)將對(duì)面向?qū)ο缶幊讨械亩鄳B(tài)性作詳細(xì)的講解。

1.什么是多態(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)需求的不斷變化。

2.多態(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ì)。

【示例】例舉了通常采用流程控制語(yǔ)句實(shí)現(xiàn)不同類(lèi)的處理。其代碼如下所示。
復(fù)制代碼 代碼如下:
<?php
    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)題。

可以首先創(chuàng)建一個(gè)員工父類(lèi),所有的員工類(lèi)將繼承自該員工父類(lèi),并且繼承父類(lèi)的所有方法與屬性。然后在員工類(lèi)中創(chuàng)建“是一”關(guān)系,判斷是否為合法的員工。

【示例】例舉了采用多態(tài)的方式改寫(xiě)上例。其代碼如下所示。
復(fù)制代碼 代碼如下:
<?php
class employee{//定義員工父類(lèi)
protected function working(){//定義員工工作,需要在子類(lèi)的實(shí)現(xiàn)
echo "本方法需要在子類(lèi)中重載!";
}
}
class painter extends employee{//定義油漆工類(lèi)
public function working(){//實(shí)現(xiàn)繼承的工作方法
echo "油漆工正在刷漆!/n";
}
}
class typist extends employee{//定義打字員類(lèi)
public function working(){
echo "打字員正在打字!/n";
}
}
class manager extends employee{//定義經(jīng)理類(lèi)
public function working(){
echo "經(jīng)理正在開(kāi)會(huì)!";
}
}
function printworking($obj){//定義處理方法
if($obj instanceof employee){//若是員工對(duì)象,則顯示其工作狀態(tài)
$obj->working();
}else{//否則顯示錯(cuò)誤信息
echo "Error: 對(duì)象錯(cuò)誤!";
}
}
printworking(new painter());//顯示油漆工的工作
printworking(new typist());//顯示打字員的工作
printworking(new manager());//顯示經(jīng)理的工作
?>

分析:在上述程序中,首先定義一個(gè)員工基類(lèi),并定義一個(gè)員工工作狀態(tài)的方法。然后定義將繼承自員工基類(lèi)的三個(gè)員工類(lèi):油漆工類(lèi)、打字員類(lèi)和經(jīng)理類(lèi)。然后定義顯示員工工作狀態(tài)的方法。并在該方法中創(chuàng)建一個(gè)“是一”關(guān)系,用于判斷是否為合法的員工。其結(jié)果如下所示。
油漆工正在刷漆!
打字員正在打字!
經(jīng)理正在開(kāi)會(huì)!
從上例可發(fā)現(xiàn),無(wú)論增加多少個(gè)員工類(lèi),只需要實(shí)現(xiàn)自員工父類(lèi)繼承的該員工類(lèi)和方法。而無(wú)須修改顯示員工工作狀態(tài)的方法printworking()。  

php技術(shù)深入php多態(tài)的實(shí)現(xiàn)詳解,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 小姐与流氓| 红海行动2在线观看| 笑口常开图片| 刘永健| 小曼哈顿| 灰姑娘电影| 一句话让男生硬邦邦的句子| 耄耋老太国产| 树屋轻调| 禁忌爱情| 一条路千山万水| 性欧洲高跟长靴靴交视频| 鹤壁旅游必去十大景点| 疯狂72小时演员表| 欢颜电视剧40集免费观看全集高清| 石灰吟教学设计一等奖优质课| 美少女战士奥特曼| 弦月梦影| 山东生活频道| 河东狮吼 电视剧| 亚洲电影在线观看| 头文字d里演员表| 少年派二电视剧免费观看完整版| 金珉奎怎么读| 补锌之王的食物| 特殊的精油按摩1| 圆的认识评课| free hd xxxx moms movie777| 美丽丽人| 解决问题五上数学| 飞天电影| 迷宫的十字路口讲了什么| 罗云熙的新剧《尸语者》哪里能看| 国内性爱视频| 海豹w| 超级小熊布迷全集免费观看| 印度西施| 死角| 四年级上册第七课的生字拼音| 特级一级片| 张勇手演过的电影|