特性
- 可以擁有常數(const)成員
- 可以有抽象方法
- 類別可以定義多個介面
- 介面可以衍生自另一個介面
可以擁有常數(const)成員
<?php interface mouth { const WIDTH = 180; }
可以有抽象方法
<?php interface mouth { //等同abstract public function eat(); public function eat(); }
類別可以定義多個介面
<?php interface eye { } interface mouth { public function eat(); } class cat implements mouth, eye { //必須實作介面eat抽象方法 public function eat() { } }
介面可以衍生自另一個介面
<?php interface face { } interface eye extends face { }
使用時機
當「多個類別(Class)」之間有共同的方法(function),但方法實做的方式有差異,可以將這些共用「方法」寫成「介面(Interface)」,讓其他的「子類別(Class)」去實做這個介面。
運用範例
延續抽象類別貓跟狗的範例。
相關文章:
依造之前介紹的多個類別(Class)」之間有共同的方法(function),但方法實做的方式有差異,可以將這些共用「方法」寫成「介面(Interface)」,讓其他的「子類別(Class),可以發現eat這方法cat跟dog都有實作但裡面實作方法不同,我們可以依造介面的特性將eat介面化。
當類別去implements 介面,就必須實作介面裡的方法。
<?php interface mouth { public function eat(); } abstract class Animal { //取動物的顏色 public function getColor() { echo $this->color; } } class Dog extends Animal implements mouth { protected $color = 'black'; public function eat() { echo '狗食'; } } class Cat extends Animal implements mouth { protected $color = 'white'; public function eat() { echo '貓食'; } } $oDog = new Dog(); $oDog->eat(); //狗食 $oCat = new Cat(); $oCat->eat(); //貓食
其他
因為貓跟狗都會繼承動物,而動物都有嘴巴,所以可以把介面給動物實例,這樣就可以不用有增加新動物都要實例介面。
<?php interface mouth { public function eat(); } abstract class Animal implements mouth { //取動物的顏色 public function getColor() { echo $this->color; } } class Dog extends Animal { protected $color = 'black'; public function eat() { echo '狗食'; } } class Cat extends Animal { protected $color = 'white'; public function eat() { echo '貓食'; } } $oDog = new Dog(); $oDog->eat(); //狗食 $oCat = new Cat(); $oCat->eat(); //貓食