溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

PHP中接口怎么用

發(fā)布時(shí)間:2021-09-02 14:19:01 來(lái)源:億速云 閱讀:178 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)PHP中接口怎么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

接口
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è)新的方法而已
    抽象類(lèi)只能單繼承,當(dāng)一個(gè)子類(lèi)需要實(shí)現(xiàn)的功能需要繼承多個(gè)父類(lèi)時(shí),就必須使用接口


代碼示例

 <?php 
  
 /** 
  * 聲明接口Demo 
  * @author wzy 
  * 
  */ 
 interface Demo 
 { 
  
  const NAME = "wangzhengyi"; 
  
  const AGE = 25; 
  
  function fun1 (); // 聲明方法默認(rèn)是public abstract 
  function fun2 (); 
 } 
  
 /** 
  * 聲明接口的繼承Demo2 
  * 
  * @author wzy 
  *   
  */ 
 interface Demo2 extends Demo 
 { 
  
  function fun3 (); 
  
  function fun4 (); 
 } 
  
 /** 
  * 聲明接口Demo3 
  * 
  * @author wzy 
  *   
  */ 
 interface Demo3 
 { 
  
  function fun5 (); 
  
  function fun6 (); 
 } 
  
 /** 
  * 聲明父類(lèi)ParentClass 
  * 
  * @author wzy 
  *   
  */ 
 class ParentClass 
 { 
  
  function fun7 (); 
 } 
  
 /** 
  * 子類(lèi)必須實(shí)現(xiàn)接口中所有的方法 
  * 
  * @author wzy 
  *   
  */ 
 class ChildClass extends ParentClass implements Demo2, Demo3 
 { 
  
  function fun1 (); 
  
  function fun2 (); 
  
  function fun3 (); 
  
  function fun4 (); 
  
  function fun5 (); 
  
  function fun6 (); 
 }

關(guān)于“PHP中接口怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI