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

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

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

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

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

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

接口使用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接口如下:

interface IPillage{ function emptyBakAccount(); function burnDocument();}

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

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

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

class Assistant extends Employee implements IPillage{ function takeMome() {  echo "Taking memo..."; } function emptyBankAccount() {  echo "Go on shopping spree with office credit card."; } function burnDocuments() {  echo "Start small fire in the trash can."; }}

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

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

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

<?php interface IEmployee{...} interface IDeveloper{...} interface IPillage{...} class Employee implements IEmployee,IDeveloper,iPillage { ... } class Contractor implements IEmployee,IDeveloper { ... }?>


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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宿松县| 北安市| 新龙县| 兰州市| 聂荣县| 广饶县| 漳州市| 道孚县| 黎城县| 麻栗坡县| 荥阳市| 广南县| 屏东市| 宝清县| 高州市| 全南县| 贵南县| 阿瓦提县| 界首市| 阿拉善盟| 边坝县| 铁力市| 康定县| 永年县| 色达县| 皋兰县| 保定市| 古交市| 济宁市| 五家渠市| 西乌| 舒城县| 新绛县| 商城县| 东源县| 安新县| 奈曼旗| 罗源县| 嘉定区| 桂阳县| 康定县|