1. 程式人生 > >PHP面向物件之介面

PHP面向物件之介面

PHP與大多數面向物件程式語言一樣,不支援多重繼承。也就是說每個類 只能繼承一個父類。

為了解決此問題,PHP引入了介面。

介面的思想是指定了一個實現該介面的類必須實現的一系列方法。

介面是一種特殊的抽象類,抽象類是一種特殊的類,所以介面也是一種特殊的類。

 

為什麼說介面是一種特殊的抽象類呢?如果一個抽象類裡面的方法都是抽象方法,那麼我們就換一種宣告方法使用“介面”,也就是說接口裡面所有的方法必須都是宣告為抽象方法,

另外接口裡邊不能宣告變數(但可以宣告常量constant)

注意:接口裡面所有的成員都是public許可權的。所以子類在實現的時候,也一定要使用public許可權。

宣告一個類的時候,使用的關鍵詞是‘class’,而介面一種特殊的類,使用關鍵詞‘interface’

類的定義

<?php
class 類名{
    .............
}

介面的定義

<?php
interface 介面名{
    ...............
}
<?php
interface demo{
	const NAME="HAOYUN";//定義一個常量
	public function say();//定義一個抽象方法 say
	public function run();//定義一個抽象方法 run
}

 程式碼分析:
定義了一個demo的介面,裡邊聲明瞭say()與run()以及一個常量,因為接口裡面所有的方法都是抽象方法,所以在宣告抽象方法時就不需要用抽象類那樣使用 abstruct 這個關鍵詞了,預設的已經加上了這個關鍵詞,另外在接口裡邊修飾符必須是公共的,所以當不寫的時候預設為public。

所以對於接口裡面的成員我們就不能使用private和protected的許可權了。

重點:因為介面是一種特殊的抽象類,裡面所有的方法都是抽象方法,所以介面也不能產生例項物件;

它也做為一種規範,所有抽象法法需要子類去實現。

 

而我們定義介面的子類實現介面中全部抽象方法使用的關鍵詞是implements,而不是extends

<?php
interface demo{
	const NAME="HAOYUN";//定義一個常量
	public function say();//定義一個抽象方法 say
	public function run();//定義一個抽象方法 run
}
class demos implements demo{
	public function say(){
		echo "say方法";
	}
	public function run(){
		echo "run方法";
	}
}
//實現了全部方法,我們可以使用子類去例項化物件了
$demos=new demo();