成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

探討PHP5多態性的具體實現方式

開發 后端
PHP5多態性是基于模式設計編程中的最偉大的工具,我們下面以實際例子來為大家講解PHP5多態性的具體知識,讓大家對PHP語言有一個深刻的認識。

PHP5作為一個新版本,實現了對遲綁定的支持,不過在實際應用中,遲綁定功能還存在一些問題,比如你使用的是更舊版本的PHP,那么你可能發現其中缺乏對于遲綁定的支持。我們今天為大家講的就是關于PHP5多態性的相關知識。

#t#一、 PHP 5和多態性

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

如果你是一位面向對象編程的入門者,那么本文可能不適合你,因為PHP5多態性這部分知識比較特別:一旦理解了它,你將永遠不會忘記。如果你想簡單了解一點對象編程和設計知識,并且當某人說"某個對象是多態的"時,還不十分清楚這是什么意思的話,那么本文正適合你。

到本文***,你應該知道什么是多態性以及如何把它應用到面向對象的設計中,并且你會了解PHP 5中對象編程的優點與不足。

二、什么是多態性?

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

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

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

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

三、應用PHP5多態性設計

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

  1. <?php   
  2.  $name = $_SESSION['name'];   
  3.  $myPerson = Person::GetPerson($name);   
  4.  switch (get_class($myPerson)){   
  5.   case 'David' :   
  6.    $myPerson->AddFeedback('Great Article!','Some Reader', date('Y-m-d'));   
  7.    break;   
  8.   case 'Charles':   
  9.    $myPerson->feedback[] = array('Some Reader', 'Great Editing!');   
  10.    break;   
  11.   case 'Alejandro' :   
  12.    $myPerson->Feedback->Append('Awesome JavaScript!');   
  13.    break;   
  14.   default :   
  15.    $myPerson->AddFeedback('Yay!');   
  16.  }   
  17. ?> 

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

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

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

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

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

  1. <?php   
  2. class Person{   
  3.  function AddFeedback($comment, $sender, $date){   
  4.   //把回饋添加到數據庫   
  5.  }   
  6. }   
  7. class David extends Person{   
  8.  function AddFeedback($comment, $sender){   
  9.   parent::AddFeedback($comment, $sender,   
  10.   date('Y-m-d'));   
  11.  }   
  12. }   
  13. ?> 

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

責任編輯:曹凱 來源: 中國IT實驗室
相關推薦

2009-11-24 16:28:41

PHP5魔術函數

2009-11-18 18:33:23

Linux PHP5安

2010-01-28 16:16:32

C++多態性

2009-11-24 17:01:39

PHP5多重繼承

2009-09-01 14:51:19

C#多態性

2009-12-01 09:18:50

PHP分割字符串

2011-07-11 16:35:28

Java

2009-06-19 14:10:42

Java多態性

2011-07-11 16:45:25

JAVA多態性

2009-11-23 20:00:25

PHP5接口PHP5抽象類

2009-09-24 17:19:06

運行時多態性

2009-11-23 16:43:03

PHP5安裝GD庫

2009-11-24 16:18:14

PHP5析構函數

2009-08-28 16:48:50

C#多態性

2009-09-01 15:08:18

C#多態性

2023-10-20 09:51:00

編程開發

2009-11-23 18:39:17

PHP重定向

2009-11-25 11:33:26

PHP驗證表單

2010-02-01 14:07:12

C++多態性

2009-03-16 16:08:09

PHP異常
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91黄在线观看 | 久久综合久久久 | 成年人黄色一级毛片 | 国产一区 在线视频 | 91精品久久久久久久久久入口 | 四虎影院免费在线 | 日韩一区二区在线播放 | 亚洲午夜精品久久久久久app | 日日噜噜噜夜夜爽爽狠狠视频97 | 欧美日韩在线观看一区二区三区 | 亚洲精品黄色 | 高清一区二区三区 | 97色在线观看免费视频 | 日韩在线免费播放 | 亚洲区一区二 | 亚洲国产自产 | 精品美女久久久 | 亚洲成网| 1区2区3区视频| 国产精品日韩欧美一区二区三区 | 国产精品视频一区二区三区 | 国产91精品久久久久久久网曝门 | 久久i| 国产精品永久免费 | 精品久久久久久久久久久 | 一区二区成人 | 亚洲精品久久久久久久久久久久久 | 男女羞羞视频在线免费观看 | 性生生活大片免费看视频 | 午夜电影网 | 国产精品无码专区在线观看 | 免费视频一区 | 久久精品免费一区二区 | 99爱在线观看 | 91精品国产综合久久久动漫日韩 | 99精品九九| japan21xxxxhd美女| 久热精品在线 | 亚洲精品欧美 | 久久999| 黄色片视频 |