1. 程式人生 > >php 介面技術

php 介面技術

什麼是介面?

先來看抽象類:抽象類是不能被例項化的類,任何一個類,如果它裡面至少有一個方法被宣告為抽象的,那麼這個類就必須被宣告為抽象的。

被定義為抽象的方法只是聲明瞭其呼叫方式(引數),不能定義其具體的功能實現。

(當然抽象類中也可以沒有抽象方法,但是含有抽象方法的類必須被定義為抽象類)。

如:abstract class 類名{

屬性1;

屬性2;

非抽象方法(){}

抽象方法1();

抽象方法2();

}

設想一下,將上述抽象類中的“實在的成員”刪除,即刪除那些非抽象的成員,那麼該抽象類中就只有抽象方法:

如:abstract class 類名{

抽象方法1();

抽象方法2();

}

由此,可以理解為:這個類“太抽象了”,幾乎自己什麼都沒做,就是讓別人來做;

那麼:介面就與這個“太抽象的類”類似;

    介面,就是規定,裡面只能放“抽象方法”和“常量”的一種類似類的結構體;

因此,介面是“比抽象類更抽象的”一種語法。



介面的定義形式(interface):

如:interface 介面名{

常量1;

常量2;

...........

抽象方法1;

抽象方法2;

...........

}

說明:1.可見介面中只有“常量”和“抽象方法”兩種成員;

    2.介面常量的使用形式為:介面名::常量名稱;

    3.介面中的抽象方法不要使用abstract修飾,也不需要使用訪問控制符修飾,因為其天然就是public修飾;

例:interface A{

const PI = 3.14;

const CC1 = 1 ;

function Show1();//抽象方法,無形參

function Func2($p1,$p2);//抽象方法,2個形參

}


為什麼需要介面?

面向物件的程式設計思想是對“現實世界”的描述,而現實世界往往是多繼承關係;

但:

出於降低類與類之間的關係的複雜度的考慮,將PHP語言設計為單繼承的;但這樣就無法表達出現實世界的多繼承特性;

所以:

介面就是對沒有多繼承的類之間關係的一個補充;因為介面可以實現“多繼承”,只是此時不稱為“繼承”而是稱為“實現”而已;

即:介面1——》類1;

就稱為:類1實現的介面1;

其本質:是類1中有了介面1中的“特徵資訊”;

例:

<?php

/*定義Player介面
*介面中的抽象方法不要使用abstract修飾,也不需要使用訪問控制符修飾,因為其天然就是public修飾;
 * */
interface Player{
    function play();
    function stop();
    function next();
    function prev();
}
/*定義USBset介面
*  介面,就是規定,裡面只能放“抽象方法”和“常量”的一種類似類的結構體;
 * */
interface USBset{
    const USBWidth = 12;
    const USBHeight = 5;
    function dataIn();//資料輸入
    function dataOut();//資料輸出
}

/*這裡MP3Player類必須實現Player,USBset中的所有方法
*php語言中一個類不可以繼承多個類,但是一個類可以繼承多個介面
 * */
class MP3Player implements Player,USBset {
    function Play(){}
    function stop(){}
    function next(){}
    function prev(){}
    function dataIn(){}
    function dataOut(){}
}