日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP 5.0中多態性的實現方案淺析

瀏覽:202日期:2024-02-07 14:39:10

提要:本文將討論多態性的概念及其在面向對象設計中的應用,還將分析如何在PHP 5中使用多態性以及存在的優缺點。

PHP的最新發行版本中已經實現了對遲綁定的支持。當然,在使用其遲綁定功能時還存在很多問題。如果你使用的是更舊版本的PHP(我的服務器上運行的是PHP 5.0.1版本),那么你可能發現其中缺乏對于遲綁定的支持。因此,請注意本文中的代碼有可能無法工作在你特定的PHP 5版本中。

一、 PHP 5和多態性

本文想討論面向對象編程中最為重要的部分之一--多態性的設計。為了說明問題,我使用了PHP 5。在你繼續閱讀之前,請首先明確本文并不是完全有關于PHP的。盡管這種語言在以前的兩個主要版本中在快速開發方面已經取得很大的進步,但是,在其與更為成熟的語言如C++或者Java相匹敵之前,它對于對象的支持還要經歷一段歷程。

如果你是一位面向對象編程的入門者,那么本文可能不適合你,因為多態性這部分知識比較特別:一旦理解了它,你將永遠不會忘記。如果你想簡單了解一點對象編程和設計知識,并且當某人說'某個對象是多態的'時,還不十分清楚這是什么意思的話,那么本文正適合你。到本文最后,你應該知道什么是多態性以及如何把它應用到面向對象的設計中,并且你會了解PHP 5中對象編程的優點與不足。

二、什么是多態性?

多態性,其來自于dictionary.com的定義是'以不同形式,階段或者類型出現在獨立的組織中或者同種組織中,而不存在根本區別。'由該定義,我們可以認為,多態性是一種通過多種狀態或階段來描述相同對象的編程方式。其實,它的真正意義在于:實際開發中,我們只需要關注一個接口或基類的編程,而不必擔心一個對象所屬于的具體類(class)。

如果你熟悉設計模式,即使只是有個初步了解,那么你也會了解這個概念。事實上,多態性可能是基于模式設計編程中的最偉大的工具。它允許我們以一種邏輯的方式來組織相類似的對象從而實現在具體編碼時不必擔心對象的具體類型;而且,我們只需要對一個所期望的接口或基類編程即可。一個應用程序越抽象,則它就顯得越靈活--而多態性是對行為加以抽象的最好的方式之一。

例如,讓我們考慮一個叫Person的類。我們可以用稱為David,Charles和Alejandro的類來子類化Person。Person有一個抽象方法AcceptFeedback(),所有的子類都要實現這個方法。這意味著,任何使用基類Person的子類的代碼都能調用方法AcceptFeedback()。你不必檢查該對象是一個David還是一個Alejandro,僅知道它是一個Person就夠了。結果是,你的代碼只需關注'最小公分母'-Person類即可。

在這個示例中的Person類也可以被創建為一個接口。當然,與上面相比存在一些區別,主要在于:一個接口并沒有給出任何行為,而僅確定了一組規則。一個Person接口要求的是'你必須支持AddFeedback()方法',而一個Person類可以提供一些AddFeedback()方法的缺省代碼-你對之的理解可以是'如果你不選擇支持AddFeedback(),那么你應該提供一種缺省實現。'至于如何選擇接口或基類則并非本文的主題;但是,一般說來,你需要通過基類來實現一個缺省的方法。如果你能夠簡單地勾勒出你的類所要實現的一組期望的功能,那么你也可以使用一個接口。

三、應用多態性設計

我們將繼續使用Person基類的例子,現在讓我們分析一個非多態性的實現。下列示例中使用了不同類型的Person對象--這是一種非常不理想的編程方式。注意,實際的Person類被省略。目前為止,我們僅關心代碼調用的問題。

<?php $name = $_SESSION['name']; $myPerson = Person::GetPerson($name); switch (get_class($myPerson)){case 'David' : $myPerson->AddFeedback('Great Article!','Some Reader', date('Y-m-d')); break;case 'Charles': $myPerson->feedback[] = array('Some Reader', 'Great Editing!'); break;case 'Alejandro' : $myPerson->Feedback->Append('Awesome Javascript!'); break;default : $myPerson->AddFeedback('Yay!'); }?>

這個示例展示了行為不同的對象,還有一個switch語句用于區分不同的Person類對象,從而執行其各自相應的正確操作。注意,這里針對不同條件的回饋注釋是不同的。在實際應用程序開發中可能不會出現這種情形;我僅為了簡單地說明類實現中存在的區別。

下面的一個示例使用了多態性。

<?php $name = $_SESSION['name']; $myPerson = Person::GetPerson($name); $myPerson->AddFeedback('Great Article!', 'SomeReader', date('Y-m-d'));?>

注意,這里沒有switch語句,而最重要的是,缺乏有關Person::GetPerson()會返回什么類型的對象。而另一個Person::AddFeedback()是一個多態方法。行為完全是由具體類進行封裝的。請記住,在此無論我們使用的是David,Charles還是Alejandro,調用代碼從不必了解具體類的功能,而僅知道基類就可以了。

盡管我的示例并不完美,但是,從調用代碼的角度,它已經展示了多態性的基本用法。現在我們需要分析這些類的內部實現。從一個基類進行派生的一個最偉大的地方在于,該派生類能夠存取父類的行為,這種情況常常是缺省的實現,但是也可能出現在類繼承鏈中用于創建更為復雜的行為。下面是這種情況的一個簡單展示。

<?phpclass Person{ function AddFeedback($comment, $sender, $date){//把回饋添加到數據庫 }}class David extends Person{ function AddFeedback($comment, $sender){parent::AddFeedback($comment, $sender,date('Y-m-d')); }}?>

在此,David類中的AddFeedback方法實現中首先調用了Person::AddFeedback方法。你可能注意到,它模仿了C++,Java或C#中的方法重載。請記住,這僅是一個簡單化的示例,并且你編寫的實際代碼完全依賴于你的實際工程。

四、PHP 5中的遲綁定

依我的看法,遲綁定正是使得Java和C#如此引人注目的重要原因。它們允許基類方法用'this'或$this來調用方法(即使它們不存在于基類中或調用一個基類中的方法,它有可能為繼承類中的另一個版本所代替)。你可以認為如下的實現在PHP中是允許的:

<?phpclass Person{ function AddFeedback($messageArray) {$this->ParseFeedback($messageArray);//寫向數據庫 }}class David extends Person{ function ParseFeedback($messageArray){// 進行一些分析 }}?>

記住,在Person類中并沒有ParseFeedback。現在,假定你擁有這一部分實現代碼(為了本例說明問題起見),那么這會導致$myPerson成為一個David對象:

<?php$myPerson = Person::GetPerson($name);$myPerson->AddFeedback($messageArray);?>

出現分析錯誤!大致錯誤信息為,方法ParseFeedback并不存在或者一些類似的信息。關于PHP 5中的遲綁定我們就討論這些!下面我們再歸納一下遲綁定的概念。

遲綁定意味著,方法調用在最后時刻才綁定到目標對象。這意味著,當該方法被運行時刻調用時,那些對象已經有了一種具體類型。在我們上面的示例中,你調用了David::AddFeedback(),而既然David::AddFeedback()中的$this引用一個David對象,那么你可以邏輯地假定ParseFeedback()方法是存在的--但事實上它并不存在,因為AddFeedback()是在Person中定義的,并且從Person類中調用ParseFeedback()。不幸的是,沒有簡單的方法來消除PHP 5中的這種行為。這意味著,當你想創建一個靈活的多態類層次時你可能有點無能為力。

我必須指出,我選擇PHP 5作為本文的表達語言僅僅是因為:這種語言并沒有實現對象概念的完美抽象!因為PHP 5還處于其測試版本運行期,所以這是可以諒解的。另外,既然該語言中加入了抽象類和接口,遲綁定也應該被實現。

五、小結

至此,你應該基本了解什么是多態性以及為什么PHP 5在實現多態性方面并不完美。一般說來,你應該知道如何用一個多態性對象模型來封裝有條件的行為。當然,這樣會提高你的對象的靈活性,并且意味著更少的代碼實現。另外,通過封裝滿足一定條件的行為(具體要依賴于對象的狀態),你還提高了代碼的清晰程度。

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩.com| 亚洲精品字幕| 国产精品久久久久久av公交车 | 久久青青视频| 精品一区二区三区四区五区| 精品国产美女a久久9999| 精品国产欧美| 日韩黄色大片| 欧美一区二区性| 亚洲国产日韩欧美在线| 国产精品人人爽人人做我的可爱| 免费成人在线观看| 日韩成人一级| 国产精品一区二区美女视频免费看| 久久不见久久见免费视频7| 黄色欧美在线| 黄色不卡一区| 蜜桃av一区二区三区电影| 91成人精品观看| 久久精品日韩欧美| 久久久久久美女精品| 国产精品美女久久久| 亚洲精品一二三**| 欧美a在线观看| 成人欧美一区二区三区的电影| 久久国产毛片| 亚洲色图综合| 美女免费视频一区| 9999国产精品| 狠狠爱www人成狠狠爱综合网| 亚洲欧美在线专区| 欧美交a欧美精品喷水| 亚洲成人一区在线观看| 男人的天堂亚洲一区| 欧美精品91| 亚洲女同中文字幕| 国产欧美日韩精品高清二区综合区 | 西西人体一区二区| 四虎精品永久免费| 久久精品国产久精国产爱| 青青久久av| 日韩精品一卡二卡三卡四卡无卡| 国产精品任我爽爆在线播放 | 国产一区二区三区久久| 伊人久久婷婷| 国产精品探花在线观看| 美女网站一区| 国产精品红桃| 久久一区二区三区喷水| 亚洲欧美日本国产| 国产美女高潮在线| 伊人久久大香伊蕉在人线观看热v| 国产精品一区二区三区av| 久久亚洲国产| 欧美视频精品全部免费观看| 日本在线精品| 欧美日韩一区二区三区不卡视频 | 国产一区二区精品福利地址| 丝瓜av网站精品一区二区| 精品欧美日韩精品| 亚洲精品黄色| 久久久久久久久久久妇女| 欧美日韩亚洲一区在线观看| 久久精品官网| 国产香蕉精品| 伊人久久亚洲热| 国产精品xxx| 一区二区电影在线观看| 国产美女高潮在线观看| 日韩精品免费视频一区二区三区| 四季av一区二区凹凸精品| 美女精品在线| 国产精品国产三级国产在线观看| 日韩一级精品| 深夜福利视频一区二区| 国产免费播放一区二区| 久久福利毛片| 日韩在线观看不卡| 国产精品草草| 日韩三级一区| 99视频+国产日韩欧美| 久久97视频| 欧美一区久久| 水野朝阳av一区二区三区| 999国产精品视频| 精品三级在线| 国产亚洲人成a在线v网站| 夜夜精品视频| 日韩免费看片| 老牛国内精品亚洲成av人片| 婷婷综合国产| 亚洲欧美成人综合| 成人日韩在线观看| 国产精品久久久久久久久久10秀 | 日韩有码av| 中文欧美日韩| 国产高清久久| 999久久久精品国产| 精品视频一区二区三区在线观看| 日本成人中文字幕| 日韩专区欧美专区| 亚洲高清影视| 免费欧美一区| 群体交乱之放荡娇妻一区二区| 久久精品欧洲| 欧美交a欧美精品喷水| 热久久久久久| 日韩国产91| 爽好久久久欧美精品| 国产一区二区高清| 性色一区二区| 欧美专区18| 亚洲一区日本| 日韩视频在线一区二区三区 | 麻豆91小视频| 国产日韩欧美三级| 欧美一区网站| 18国产精品| 日本欧美一区二区在线观看| 亚洲精品系列| 日本不卡高清视频| 日本国产欧美| 午夜精品福利影院| 亚洲毛片一区| 欧美在线91| 国产精品入口久久| 精品美女视频| 日韩精品91| 久久久久蜜桃| 在线一区免费| 久色成人在线| 少妇精品久久久一区二区| 中文字幕av一区二区三区四区| 久久香蕉精品| 婷婷精品在线| 国产欧美91| 日韩1区在线| 九一精品国产| 午夜久久av | 人在线成免费视频| 91精品一区二区三区综合| 欧美91精品| 三级欧美韩日大片在线看| 综合一区二区三区| 国产精品一区二区三区www| 色综合狠狠操| 99视频精品全国免费| 日本欧洲一区二区| 国产精品亚洲人成在99www| zzzwww在线看片免费| 国产综合精品一区| 在线免费观看亚洲| 国产福利亚洲| 一区二区三区视频免费观看| 石原莉奈一区二区三区在线观看| 欧美日韩一区二区三区不卡视频| 成人午夜在线| 亚洲电影在线一区二区三区| 在线观看亚洲精品福利片| 欧美天堂一区| 色88888久久久久久影院| 亚洲精品国产偷自在线观看| 日本免费在线视频不卡一不卡二| 国产一区二区三区视频在线| 午夜国产精品视频| 日本午夜精品久久久久| 黄在线观看免费网站ktv| 在线亚洲激情| 国产精品v日韩精品v欧美精品网站| 四虎国产精品免费观看| 亚洲欧美日韩精品一区二区 | 91精品一区国产高清在线gif| 久久不射网站| 麻豆国产欧美一区二区三区| 亚洲午夜精品久久久久久app| 亚洲乱码一区| 亚洲国产欧美日本视频| 首页国产欧美久久| 精品91福利视频| 在线国产一区二区| 久久gogo国模啪啪裸体| 黄色日韩精品| 精品国产乱码久久久久久樱花| 九一精品国产| 美女av一区| 亚洲香蕉久久| 国产精品成人a在线观看| 一本一本久久| 91一区二区| 69堂免费精品视频在线播放| 欧美亚洲国产激情| 日韩激情视频网站| 欧美 日韩 国产一区二区在线视频| 国产探花一区在线观看| 免费观看久久av| 精品中文在线| 日韩国产欧美三级| 欧美日韩精品一本二本三本| 精品视频免费| 欧洲av不卡|