PHP面向物件之介面
阿新 • • 發佈:2018-11-03
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();