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(){} }