国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

詳細(xì)解讀PHP中接口的應(yīng)用

2024-05-04 23:38:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了PHP中接口的應(yīng)用,是PHP入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

接口

PHP類是單繼承,也就是不支持多繼承,當(dāng)一個(gè)類需要多個(gè)類的功能時(shí),繼承就無(wú)能為力了,為此PHP引入了接口技術(shù)

如果一個(gè)抽象類里面的所有方法都是抽象方法,且沒(méi)有聲明變量,而且接口里面所有的成員都是public權(quán)限的,那么這種特殊的抽象類就叫接口

接口使用interface關(guān)鍵字定義,并使用implements來(lái)實(shí)現(xiàn)接口的方法,且必須完全實(shí)現(xiàn)

實(shí)現(xiàn)一個(gè)接口

下面給出PHP接口實(shí)現(xiàn)的一個(gè)實(shí)際例子,在此創(chuàng)建并實(shí)現(xiàn)了一個(gè)名為IPillage的接口,IPillage接口如下:

 

 
  1. interface IPillage 
  2. function emptyBakAccount(); 
  3. function burnDocument(); 

然后通過(guò)Executive類實(shí)現(xiàn)此接口:

 

 
  1. class Executive extends Employee implements IPillage 
  2. private $totalStockOptions; 
  3. function emptyBankAccount() 
  4. echo "Call CFO and ask to transfer funds to Swiss bank account."
  5. function burnDocuments() 
  6. echo "Torch the office suite."

因?yàn)楣局兴屑?jí)別的人都能進(jìn)行侵占,所以可以有Assistant類實(shí)現(xiàn)此接口:

 

 
  1. class Assistant extends Employee implements IPillage 
  2. function takeMome() 
  3. echo "Taking memo..."
  4. function emptyBankAccount() 
  5. echo "Go on shopping spree with office credit card."
  6. function burnDocuments() 
  7. echo "Start small fire in the trash can."

可以看到,接口特別有用。因?yàn)椋m然它們定義了發(fā)生某一行為需要多少個(gè)方法,以及各個(gè)方法的名字,但接口允許不同的類,以不同的方式來(lái)實(shí)現(xiàn)這些方法。在這個(gè)例子中,對(duì)于燒文件的方法,Assistdnt類只是把文件在垃圾筒里燒掉,而Executive類則通過(guò)更過(guò)分的方式來(lái)做到(將它的辦公室燒掉)。

實(shí)現(xiàn)多個(gè)接口

如果我們?cè)试S外來(lái)承包商侵占公司是不公平的,畢竟公司是在所有全職員工的努力之下建立的。就是說(shuō),怎樣為員工提供工作和侵占公司的功能,而限制承包商只能完成所需的任務(wù)呢?解決的辦法是將這些任務(wù)分成幾項(xiàng)任務(wù),然后實(shí)現(xiàn)必要的多個(gè)接口。PHPS 支持這個(gè)特性。考慮如下例子:

 

 
  1. <?php 
  2. interface IEmployee{...} 
  3. interface IDeveloper{...} 
  4. interface IPillage{...} 
  5. class Employee implements IEmployee,IDeveloper,iPillage { 
  6. ... 
  7. class Contractor implements IEmployee,IDeveloper { 
  8. ... 
  9. ?> 

抽象類和接口的區(qū)別

接口是一個(gè)特殊的抽象類,也可以看作是一個(gè)模型的規(guī)范。接口與抽象類大致區(qū)別如下:

一個(gè)子類如果implements一個(gè)接口,就必須實(shí)現(xiàn)接口中的所有方法(不管是否需要);如果繼承一個(gè)抽象類,只需要實(shí)現(xiàn)需要的方法即可

如果一個(gè)接口中定義的方法名改變了,那么所有實(shí)現(xiàn)此接口的子類需要同步更新方法名;而抽象類中如果方法名改變了,其子類對(duì)應(yīng)的方法名將不受影響,只是變成了一個(gè)新的方法而已

抽象類只能單繼承,當(dāng)一個(gè)子類需要實(shí)現(xiàn)的功能需要繼承多個(gè)父類時(shí),就必須使用接口

代碼示例

 

 
  1. <?php  
  2.  
  3. /**  
  4. * 聲明接口Demo  
  5. * @author wzy  
  6.  
  7. */ 
  8. interface Demo  
  9. {  
  10.  
  11. const NAME = "wangzhengyi";  
  12.  
  13. const AGE = 25;  
  14.  
  15. function fun1 (); // 聲明方法默認(rèn)是public abstract  
  16. function fun2 ();  
  17. }  
  18.  
  19. /**  
  20. * 聲明接口的繼承Demo2  
  21.  
  22. * @author wzy  
  23.  
  24. */ 
  25. interface Demo2 extends Demo  
  26. {  
  27.  
  28. function fun3 ();  
  29.  
  30. function fun4 ();  
  31. }  
  32.  
  33. /**  
  34. * 聲明接口Demo3  
  35.  
  36. * @author wzy  
  37.  
  38. */ 
  39. interface Demo3  
  40. {  
  41.  
  42. function fun5 ();  
  43.  
  44. function fun6 ();  
  45. }  
  46.  
  47. /**  
  48. * 聲明父類ParentClass  
  49.  
  50. * @author wzy  
  51.  
  52. */ 
  53. class ParentClass  
  54. {  
  55.  
  56. function fun7 ();  
  57. }  
  58.  
  59. /**  
  60. * 子類必須實(shí)現(xiàn)接口中所有的方法  
  61.  
  62. * @author wzy  
  63.  
  64. */ 
  65. class ChildClass extends ParentClass implements Demo2, Demo3  
  66. {  
  67.  
  68. function fun1 ();  
  69.  
  70. function fun2 ();  
  71.  
  72. function fun3 ();  
  73.  
  74. function fun4 ();  
  75.  
  76. function fun5 ();  
  77.  
  78. function fun6 ();  
  79. }  

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰考县| 潼南县| 阳高县| 阳西县| 正蓝旗| 原平市| 民勤县| 潼南县| 浏阳市| 辽宁省| 长海县| 孝昌县| 台北市| 梧州市| 贵德县| 方正县| 新疆| 元江| 巴里| 井冈山市| 黎城县| 根河市| 奈曼旗| 昌吉市| 贵南县| 嘉兴市| 龙陵县| 郁南县| 常熟市| 汕尾市| 庄河市| 张家界市| 临安市| 章丘市| 黄梅县| 虞城县| 洞头县| 南开区| 垣曲县| 北川| 高州市|