成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

PHP中多態(tài)性是什么意思

在PHP中,多態(tài)性是指同一個(gè)操作作用于不同的類的實(shí)例,將產(chǎn)生不同的執(zhí)行結(jié)果。也即不同類的對象收到相同的消息時(shí),將得到不同的結(jié)果;不同的對象,收到同一消息將可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。多態(tài)性允許每個(gè)對象以適合自身的方式去響應(yīng)共同的消息;多態(tài)性增強(qiáng)了軟件的靈活性和重用性。

PHP中多態(tài)性是什么意思

本教程操作環(huán)境:windows7系統(tǒng)、PHP8版、DELL G3電腦

PHP 多態(tài)性

多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息將可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。

多態(tài)性允許每個(gè)對象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng)了軟件的靈活性和重用性。

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

1.什么是多態(tài)

多 態(tài)(Polymorphism)按字面上意思理解就是“多種形狀”。可以理解為多種表現(xiàn)形式,也即“一個(gè)對外接口,多個(gè)內(nèi)部實(shí)現(xiàn)方法”。在面向?qū)ο蟮睦碚?中,多態(tài)性的一般定義為:同一個(gè)操作作用于不同的類的實(shí)例,將產(chǎn)生不同的執(zhí)行結(jié)果。也即不同類的對象收到相同的消息時(shí),將得到不同的結(jié)果。

在實(shí)際的應(yīng)用開發(fā)中,采用面向?qū)ο笾械亩鄳B(tài)主要在于可以將不同的子類對象都當(dāng)作一個(gè)父類來處理,并且可以屏蔽不同子類對象之間所存在的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。

2. 多態(tài)的應(yīng)用設(shè)計(jì)

在實(shí)際的應(yīng)用開發(fā)中,通常為了使項(xiàng)目能夠在以后的時(shí)間里的輕松實(shí)現(xiàn)擴(kuò)展與升級,需要通過繼承實(shí)現(xiàn)可復(fù)用模塊進(jìn)行輕松升級。在進(jìn)行可復(fù)用模塊設(shè)計(jì)時(shí),就需要盡可能的減少使用流程控制語句。此時(shí)就可以采用多態(tài)實(shí)現(xiàn)該類設(shè)計(jì)。

【示例】例舉了通常采用流程控制語句實(shí)現(xiàn)不同類的處理。其代碼如下所示。

class painter{ //定義油漆工類 public function paintbrush(){ //定義油漆工動(dòng)作 echo "油漆工正在刷漆!n"; } } class typist{ //定義打字員類 public function typed(){ //定義打字員工作 echo "打字員正在打字!n"; } } function printworking($obj){ //定義處理類 if(objinstanceofpainter)//若對象是油漆工類,則顯示油漆工動(dòng)作$obj?>paintbrush();elseif(obj instanceof typist){ //若對象是打字員類,則顯示打字員動(dòng)作 $obj->typed(); }else{ //若非以上類,則顯示出錯(cuò)信息 echo "Error: 對象錯(cuò)誤!"; } } printworking(new painter()); //顯示員工工作 printworking(new typist()); //顯示員工工作
登錄后復(fù)制

分析:在上述程序中,首先定義兩個(gè)員工類:油漆工類和打字員類。然后定義一個(gè)處理函數(shù),在該函數(shù)中,判斷員工是否為已經(jīng)定義的員工,打印出員工的工作狀態(tài)。其結(jié)果如下所示。

油漆工正在刷漆   打字員正在打字
登錄后復(fù)制

從 以上程序可輕松看出,若想顯示其幾種員工的工作狀態(tài),需要首先定義該員工類,并在該員工類中定義員工的工作,然后在printworking()函數(shù)中增 加elseif語句以檢查對象是哪一員工類的實(shí)例。這在實(shí)際的應(yīng)用中,是非常不可取的。若此時(shí)采用多態(tài),則可以輕松解決此問題。

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

【示例】例舉了采用多態(tài)的方式改寫上例。其代碼如下所示。

class employee{//定義員工父類 protected function working(){//定義員工工作,需要在子類的實(shí)現(xiàn) echo "本方法需要在子類中重載!"; } } class painter extends employee{//定義油漆工類 public function working(){//實(shí)現(xiàn)繼承的工作方法 echo "油漆工正在刷漆!n"; } } class typist extends employee{//定義打字員類 public function working(){ echo "打字員正在打字!n"; } } class manager extends employee{//定義經(jīng)理類 public function working(){ echo "經(jīng)理正在開會(huì)!"; } } function printworking($obj){//定義處理方法 if($obj instanceof employee){//若是員工對象,則顯示其工作狀態(tài) $obj->working(); }else{//否則顯示錯(cuò)誤信息 echo "Error: 對象錯(cuò)誤!"; } } printworking(new painter());//顯示油漆工的工作 printworking(new typist());//顯示打字員的工作 printworking(new manager());//顯示經(jīng)理的工作
登錄后復(fù)制

分析:在上述程序中,首先定義一個(gè)員工基類,并定義一個(gè)員工工作狀態(tài)的方法。然后定義將繼承自員工基類的三個(gè)員工類:油漆工類、打字員類和經(jīng)理類。然后定義顯示員工工作狀態(tài)的方法。并在該方法中創(chuàng)建一個(gè)“是一”關(guān)系,用于判斷是否為合法的員工。其結(jié)果如下所示。

油漆工正在刷漆!  打字員正在打字!  經(jīng)理正在開會(huì)!
登錄后復(fù)制

從上例可發(fā)現(xiàn),無論增加多少個(gè)員工類,只需要實(shí)現(xiàn)自員工父類繼承的該員工類和方法。而無須修改顯示員工工作狀態(tài)的方法printworking()。

實(shí)現(xiàn)php多態(tài)的兩種方法

在PHP5中,變量的類型是不確定的,一個(gè)變量可以指向任何類型的數(shù)值、字符串、對象、資源等。我們無法說PHP5中多態(tài)的是變量。

我們只能說在PHP5中,多態(tài)應(yīng)用在方法參數(shù)的類型提示位置。

一個(gè)類的任何子類對象都可以滿足以當(dāng)前類型作為類型提示的類型要求。

所有實(shí)現(xiàn)這個(gè)接口的類,都可以滿足以接口類型作為類型提示的方法參數(shù)要求。

簡單的說,一個(gè)類擁有其父類、和已實(shí)現(xiàn)接口的身份。

通過實(shí)現(xiàn)接口實(shí)現(xiàn)多態(tài)

<?php interface User{ // User接口     public function  getName();     public function setName($_name); } class NormalUser implements User { // 實(shí)現(xiàn)接口的類.     private $name;     public function getName(){         return $this->name;     }     public function setName($_name){         $this->name = $_name;     } } class UserAdmin{ //操作.     public  static  function  ChangeUserName(User $_user,$_userName){         $_user->setName($_userName);     } } $normalUser = new NormalUser(); UserAdmin::ChangeUserName($normalUser,"Tom");//這里傳入的是 NormalUser的實(shí)例. echo $normalUser->getName(); ?>
登錄后復(fù)制

使用接口與組合模擬多繼承

通過組合模擬多重繼承。

在PHP中不支持多重繼承,如果我們向使用多個(gè)類的方法而實(shí)現(xiàn)代碼重用有什么辦法么?

那就是組合。在一個(gè)類中去將另外一個(gè)類設(shè)置成屬性。

下面的例子,模擬了多重繼承。

接口實(shí)例

寫一個(gè)概念性的例子。 我們設(shè)計(jì)一個(gè)在線銷售系統(tǒng),用戶部分設(shè)計(jì)如下: 將用戶分為,NormalUser, VipUser, InnerUser 三種。要求根據(jù)用戶的不同折扣計(jì)算用戶購買產(chǎn)品的價(jià)格。并要求為以后擴(kuò)展和維護(hù)預(yù)留空間。

<?php interface User {     public function getName();     public function setName($_name);     public function getDiscount(); } abstract class AbstractUser implements User {     private $name = "";     protected  $discount = 0;     protected  $grade = "";     function construct($_name) {         $this->setName($_name);      }     function getName() {         return $this->name;     }     function setName($_name) {     $this->name = $_name;     }     function getDiscount() {         return $this->discount;     }     function getGrade() {         return $this->grade;     } } class NormalUser  extends  AbstractUser {     protected $discount = 1.0;     protected $grade = "Normal"; } class VipUser extends AbstractUser {     protected $discount = 0.8;     protected $grade = "VipUser"; } class InnerUser extends AbstractUser {     protected $discount = 0.7;     protected $grade = "InnerUser"; } interface Product {     function getProductName();     function getProductPrice(); } interface Book extends Product {     function getAuthor(); } class BookOnline implements Book {     private $productName;     protected $productPrice;     protected $Author;     function construct($_bookName) {         $this->productName = $_bookName;     }     function getProductName() {         return $this->productName;     }     function getProductPrice() {         $this->productPrice = 100;         return $this->productPrice;     }     public function getAuthor() {         $this->Author = "chenfei";         return $this->Author;     } } class Productsettle {     public static function finalPrice(User $_user, Product $_product, $number) {         $price = $_user->getDiscount() * $_product->getProductPrice() * $number;         return $price;     } } $number = 10; $book = new BookOnline(" 設(shè)計(jì)模式 "); $user = new NormalUser("tom"); $price = Productsettle::finalPrice($user, $book, $number); $str = "您好,尊敬的" . $user->getName() . "<br />"; $str .= "您的級別是" . $user->getGrade() . "<br />"; $str .= "您的折扣是" . $user->getDiscount() . "<br />"; $str .= "您的價(jià)格是" . $price; echo $str; ?>
登錄后復(fù)制

推薦學(xué)習(xí):《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国精品产露脸偷拍视频| 久久精品国产一区二区三区肥胖| 韩国日本三级在线观看| 精品国产亚洲第一区二区三区| 精品一区二区三区免费视频 | 亚洲国产AV一区二区三区四区| 亚洲精品中文字幕久久久久| 在线天堂8高清版在线观看| XXXX娇小10另类| 国产爱豆剧传媒在线观看视频 | 成年午夜免费AⅤ在线观看| 国产成人AV性色在线影院色戒| 国产人无码A在线西瓜影音| 娇妻卧室含辱迎接领导是哪部电影| 精品亚洲自慰AV无码喷奶水| 久久精品国产99精品国产2| 精品久久AⅤ人妻中文字幕| 看全色黄大色大片免费无码| 欧美精产国品一二三区别| 日韩人妻系列无码专区| 西西人体大胆午夜啪啪| 亚洲丰满熟妇浓毛XXXX| 亚洲熟妇在线观看| 中文日产幕无限码一区有限公司| 97人妻碰碰碰久久久久禁片| 99久久夜色精品国产网站| 丰满老师少妇久久久久久1| 公交车强摁做开腿呻吟| 国产欧美VA欧美VA香蕉在| 狠狠爱无码一区二区三区| 精品国产自产自在线观看蜜桃 | 亚洲欧美偷拍另类A∨| 野草乱码一二三四区别在哪| 19782美国农场主的三个女儿| JIZZJIZZJIZZ亚洲热| 俄罗斯IPHONE14PRO| 国产精品久久国产三级国| 精产国品一二三产品麻豆| 女人天堂亚洲AⅤ在线观看| 色综合伊人色综合网站无码| 亚洲国产精品久久一线APP | 把女的下面扒开添视频| 国产一级 片内射30岁老熟女| 久久综合狠狠综合久久综合88| 日本真人边吃奶边做爽动态图| 亚洲AV无码久久久久久精品同性| 91人妻中文字幕在线精品| 国产成人一区二区精品视频| 久久久久久精品精品免费| 日本真人无遮挡啪啪免费| 亚洲AV无码成人精品区蜜桃| 2022久久国产精品免费热麻豆| 国产精品55夜色66夜色| 里面也请好好疼爱第5话在哪| 少妇无码太爽了在线播放 | 在线观看中文最近最新观看| 国产AV无码专区亚洲AⅤ| 久久人与动人物A级毛片| 深夜A级毛片催情精视频免费 | 日韩亚洲欧美久久久WWW综合| 亚洲国产精品久久久久爰| 成·人免费午夜无码视频| 精品人妻在线一区二区三区| 搡老女人ⅩXXX搡老女人电影看| 亚洲色精品88色婷婷七月丁香| 不什么不什么的成语| 国产午夜亚洲精品理论片八戒 | 中国极品少妇XXXXX| 国产男男激情VIDEOSGAY| 欧美人妻一区二区三区| 亚洲αⅴ无码乱码在线观看性色| JEAⅠOUSVUE成熟少归A| 精品熟妇无码av免费久久 | 波多野结衣美乳人妻HD电影欧美| 精品综合久久久久久8888| 色欲AV无码一区二区三区 | 无码人妻精品一二三区免费| CHINESE呻吟VIDEOS| 九九久久99综合一区二区| 四虎最新在线永久免费| 91人人澡人人爽内射电影院| 教官在我腿中疯狂律动H| 乳头羞涩NP公主| 24小时日本在线| 精品亚洲国产成人AV在线时间短| 熟女少妇a性色生活片毛片| 2023极品少妇XXXO露脸| 久久见久久久国产精品蜜桃| 无码人妻AⅤ一区二区三区水密桃| CHINA熟妇老熟女HD| 久久久国产一区二区三区| 无人区码一码二码三MBA| 成年美女黄网站色大片免费看| 老妇FREE性VIDEOSXX| 亚洲国产精品无码久久98| 国产盗摄XXXX视频XXXX| 人鲁交YAZHONGHUCXX| 亚洲精品天天影视综合网| 国产精品免费高清在线观看| 日本伦奷在线播放| 99RE热这里只有精品| 久久久久精品无码专区 | 欧美人与性囗牲恔配视频| 亚洲国产精品成人久久 | 全部孕妇毛片丰满孕妇孕交| 一本大道在线无码一区| 精品久久久久久无码人妻VR| 无遮高潮国产免费观看| 寡妇两腿间黑黑的毛毛是什么| 全力以赴的行动派第二季| 2021国内精品久久久久精品K| 精品一区二区无码免费| 无码精品人妻一区二区三区影院 | 亚洲熟妇无码乱子AV| 好嗨哟片在线观看| 小SAO货边洗澡边CAO你动漫| 国产成在线观看免费视频成本人| 日日躁夜夜躁狠狠躁| 边喂奶边中出的人妻| 秋霞免费理论片在线观看| 99成人国产综合久久精品| 年轻漂亮的女邻居观看在线视频| 中国人妻被两个老外三P| 撅高屁股乖乖被学长CAO男男| 午夜无码伦费影视在线观看果冻| 成人午夜福利免费无码视频| 欧美顶级METART裸体全部自慰| 一本大道东京热无码| 鳮巴又大又爽我高潮了免费视频| 无码人妻精品一区二区三区免费看| 班长哭着说不能再C了视频 | 久久国产精品二国产精品| 亚洲色成人网站WWW永久| 国产剧情麻豆女教师在线观看| 少妇伦子伦精品无码STYLES| 囯产精品一区二区三区线| 天堂在/线中文在线资源8| 国产精品99久久久久久宅男| 无码H片在线观看网站| 国产免费永久精品无码| 亚洲AV成人在线播放| 花火と在线观看动漫免费| 亚洲欧美激情精品一区二区| 久久精品国产亚洲AV麻豆甜| 一区二区不卡AV免费观看| 蜜桃av无码一区二区三区| 9999国产精品欧美久久久久久| 欧美日本国产VA高清CABAL| 宝贝儿感受到它对你的爱了吗小说| 人妻无码不卡中文字幕在线视频| 北条麻妃国产九九九精品视频| 日韩精品一区二区三区乱码79| 国产99精品视频一区二区三区| 无码专区中文字幕无码野外| 国精产品W灬源码1688在线| 亚洲精品无码伊人久久| 久久久久精品少妇9999| 91精品人妻一区二区三区蜜蜜挑| 男生晚上睡不着想看B站| 再深点灬舒服灬太大了网站| 久久综合狠狠色综合伊人| 幼射HD交中国妇| 免费一对一真人视频| 6080YYY午夜理伦三级| 人妻精品AAAA中文字幕69 | 精产国品一二三产区区别| 亚洲精品中文字幕久久久久下载| 理论片午午伦夜理片久久| CHINA中国人妻VIDEO| 色婷婷久久综合中文久久蜜桃AV| 国产精品揄拍100视频| 亚洲日韩精品无码专区加勒比海| 麻豆AV一区二区天美传媒| 锕锕锕锕锕锕锕好疼JK漫画| 天堂А√中文最新版地址在线| 回民丰满少妇XXX性| 中文字幕日韩精品有码视频| 人妻无码熟妇乱又伦精品| 国产精品一区二区AV| 亚洲线精品一区二区三八戒| 欧美日韩一区二区三区自拍 | 日本熟妇人妻ⅩXXXX| 国产精品欧美一区二区三区| 亚洲熟妇色XXXXⅩ欧美| 欧美极品JIZZHD欧美| 国产精品VA无码一区二区| 亚洲AV无码卡通动漫AV| 久久久水蜜桃国产成人网站| 爆乳女教师 高清BD| 性高湖久久久久久久久| 老湿机影院免费观看| 动漫精品视频一区二区三区| 亚洲国产精品成人网址天堂| 欧美A级毛欧美1级A大片式放 | 免费国产成人高清在线观看网站| CHINESE勾搭VIDEOS| 斯诺克直播在线观看高清直播| 精品少妇人妻AV一区二区三区| 中文字幕有码中文无码| 天堂√最新版中文在线|