php面向對象之多態

多態是面向對三個重要特性之一,但是有時跟一些php開發的朋友聊天,發現很多php程序員對多態都存在誤解,有不少人以爲多態就是根據傳入參數的類型和個數不同,執行不同的函數,而其實,這個觀點是錯誤的。
 
那麼我們先引用百度百科對多態的描述吧。在面嚮對象語言中,接口的多種不同的實現方式即爲多態。多態性是允許你將父對象設置成爲和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。
 
從這個定義中,我們可以理解,多態其實引入的是整個類,如果用工廠來比喻,多態引入的是整條生產線,實現的是工廠模式的工作模式。而根據傳入參數的類型和個數不同,執行不同的函數,這種工作模式其實可以說是映射,而不是多態,它實現的是根據傳入的參數類型和個數不同,映射到對應的不同函數中執行不同的代碼,這也不是工廠模式。
 
好吧,說了這麼多理論,給一個案例給大家,一下子就知道什麼是多態了。
 
  1. <?php 
  2.  
  3. /** 
  4. * 數據庫基類 
  5. */ 
  6. interface SqlDri { 
  7.    public function connect(); 
  8.  
  9. /** 
  10. * mysql子類 
  11. */ 
  12. class MysqlObj implements SqlDri {  
  13.    public function connect() { 
  14.         print "mysql connect success!"
  15.    } 
  16.  
  17. /** 
  18. * mssql子類 
  19. */ 
  20. class MssqlObj implements SqlDri { 
  21.    public function connect() { 
  22.         print "mssql connect success!"
  23.    } 
  24.  
  25. /** 
  26. * 多態入口 
  27. */ 
  28. class SqlEnt { 
  29.    public function connect(SqlDri $SqlDri) { 
  30.         $SqlDri->connect(); 
  31.    } 
  32.  
  33.  
  34. $SqlEnt = new SqlEnt(); 
  35. $SqlEnt->connect(new MysqlObj()); 
  36. //$SqlEnt->connect(new MssqlObj()); 
  37.  
  38. ?>

1.什麼是多態

 

多態(Polymorphism)按字面上意思理解就是“多種形狀”。可以理解爲多種表現形式,也即“一個對外接口,多個內部實現方法”。在面向對象的理論中,多態性的一般定義爲:同一個操作作用於不同的類的實例,將產生不同的執行結果。也即不同類的對象收到相同的消息時,將得到不同的結果。

 

在實際的應用開發中,採用面向對象中的多態主要在於可以將不同的子類對象都當作一個父類來處理,並且可以屏蔽不同子類對象之間所存在的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。

 

2.  多態的應用設計

 

在實際的應用開發中,通常爲了使項目能夠在以後的時間裏的輕鬆實現擴展與升級,需要通過繼承實現可複用模塊進行輕鬆升級。在進行可複用模塊設計時,就需要儘可能的減少使用流程控制語句。此時就可以採用多態實現該類設計。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章