PHP與大多數物件導向程式語言一樣,不支援多重繼承。也就是說每個類別只能繼承一個父類別。為了解決這個問題,PHP引入了接口,接口的想法是指定了一個實現了該接口的類別必須實現的一系列方法。介面是一種特殊的抽象類,抽象類別又是一種特殊的類,所以介面也是一種特殊的類,為 什麼說介面是一種特殊的抽象類別呢?如果一個抽象類別裡面的所有的方法都是抽象方法,那麼我們就換一種宣告方法使用「介面」;也就是說介面裡面所有的方法必須都是宣告為抽象方法,另外介面裡面不能宣告變數(但可宣告常數constant),而且介面裡面所有的成員都是public權限的。所以子類別在實作的時候 也一定要使用public權限實限。
聲明一個類的時候我們使用的關鍵字是“class”,而接口一種特殊的類,使用的關鍵字是“interface”;
類的定義: class 類名{ … } ,
介面的聲明:interface 介面名稱{ …}
//定義一個介面使用interface關鍵字,「One」為介面名稱
interface One
{
/定義一個常數
const constant = 'constant value';
//定義了一個抽象方法”fun1”
public function fun1(); ();
}
?>
上例中定義了一個介面“one”,裡面聲明了兩個抽象方法“fun1”和”fun2”,因為介面裡面所有的方法都是抽象方法,所以在宣告抽象方法的時候就不用像抽象類別那樣使用「abstract」這個關鍵字了,預設的已經加上這個關鍵字,另外在介面裡邊的」public」這個存取權限也可以去掉,因為預設就是public的,因為介面裡所有成員都要是公有的,所在對於介面裡面的成員我們就不能使用「private」的和「protected」的權限了,都要用public或是預設的。另外在介面裡面我們也宣告了一個常數「constant「, 因為在介面裡面不能用變數成員,所以我們要用 const這個關鍵字聲明。
因為介面是一種特殊的抽象類,裡面所有的方法都是抽象方法,所以介面也不能產生實例物件; 它也做為一種規範,所有抽象方法都需要子類別去實作。
我們可以使用”extends”關鍵字讓一個接口去繼承另一個接口://使用”extends”繼承另外一個接口
interface Two extends One
{
function fun3();
function fun4();
}
?>
而我們定義中的子類“implements”,而不是我們前面所說的“extends”;
//使用“implements”這個去實現接口中的抽象方法間class Three implements One
{
function fun1() {
...
}
function fun2(實現了全部方法,我們去可以使用子類別去實例化物件了$three=new Three();?>
class Four implemtns 介面一, 介面二, ...{//必須把所有介面中的方法都要實作才可以實例化物件。 }
?>
PHP中不僅一個類別可以實作多個接口,也可以在繼承一個類別的同時實作多個介面, 一定要先繼承類別去實作介面;
//使用extends繼承一個類,使用implements實作多個介面class Four extends 類別名稱一implemtns 介面一, 介面二, ...
{
中的方法都要實現才可以實例化物件
...}?>
以上就介紹了php物件導向OOP—介面interface,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。