PHP 接口
PHP 類是單繼承,也就是不支持多繼承,當一個類須要多個類的功能時,繼承就無能爲力了,爲此 PHP 引入了類的接口技術。
若是一個抽象類裏面的全部方法都是抽象方法,且沒有聲明變量,並且接口裏面全部的成員都是 public 權限的,那麼這種特殊的抽象類就叫 接口 。
接口使用關鍵字 interface 來定義,並使用關鍵字 implements 來實現接口中的方法,且必須徹底實現。
例子:php
<?php //定義接口 interface User{ function getDiscount(); function getUserType(); } //VIP用戶 接口實現 class VipUser implements User{ // VIP 用戶折扣係數 private $discount = 0.8; function getDiscount() { return $this->discount; } function getUserType() { return "VIP用戶"; } } class Goods{ var $price = 100; var $vc; //定義 User 接口類型參數,這時並不知道是什麼用戶 function run(User $vc){ $this->vc = $vc; $discount = $this->vc->getDiscount(); $usertype = $this->vc->getUserType(); echo $usertype."商品價格:".$this->price*$discount; } } $display = new Goods(); $display ->run(new VipUser); //能夠是更多其餘用戶類型 ?>
運行該例子,輸出:
VIP用戶商品價格:80 元
該例子演示了一個 PHP 接口的簡單應用。該例子中,User 接口實現用戶的折扣,而在 VipUser 類裏面實現了具體的折扣係數。最後商品類 Goods 根據 User 接口來實現不一樣的用戶報價。
該例子僅限於演示 PHP 接口的用法,不涉及其科學與否。
實現多個接口
PHP也能夠在繼承一個類的時候同時實現多個接口:
class 子類 extends 父類 implemtns 接口1, 接口2, ...
{html
......
}
抽象類和接口的區別
1.接口是特殊的抽象類,也能夠看作是一個模型的規範。接口與抽象類大體區別以下:
一個子類若是 implements 一個接口,就必須實現接口中的全部方法(無論是否須要);若是是繼承一個抽象類,只須要實現須要的方法便可。
2.若是一個接口中定義的方法名改變了,那麼全部實現此接口的子類須要同步更新方法名;而抽象類中若是方法名改變了,其子類對應的方法名將不受影響,只是變成了一個新的方法而已(相對老的方法實現)。
3.抽象類只能單繼承,當一個子類須要實現的功能須要繼承自多個父類時,就必須使用接口。ide