PHP 類的接口 interface 與 implements 關鍵字 PHP 接口

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

來自:http://www.5idev.com/p-php_cl...this

相關文章
相關標籤/搜索