首頁 >後端開發 >php教程 >php中介面與抽象類別區別及如何定義及繼承介面實例程式碼詳解

php中介面與抽象類別區別及如何定義及繼承介面實例程式碼詳解

伊谢尔伦
伊谢尔伦原創
2017-07-03 10:19:091640瀏覽

抽象類別和介面的區別

介面是特殊的抽象類,也可以看做是一個模型的規範。介面與抽象類別大致差異如下:

   一個子類別如果implements 一個接口,就必須實作介面中的所有方法(不管是否需要);如果是繼承一個抽象類,只需要實作需要的方法即可。

   如果一個介面中定義的方法名稱改變了,那麼所有實作此介面的子類別需要同步更新方法名稱;而在抽象類別中如果方法名稱改變了,其子類別對應的方法名稱將不受影響,只是變成了一個新的方法而已(相對老的方法實現)。

   抽象類別只能單繼承,當一個子類別需要實現的功能需要繼承自多個父類別時,就必須使用介面。

程式碼範例:

<?php
//简单定义实现接口
interface UserInterface{  //定义user接口
    function getname();
}
interface TeacherInterface{    //定义teacher接口
    function getLengthofService();
}
class User implements UserInterface{ //实现user接口
    private $name="nostop";
    public function getName(){
        return $this->name;
    }
}
class Teacher implements TeacherInterface{ //实现teacher接口
    private $age=23;
    public function getLengthofService(){
        return $this->age;
    }
}
$user=new User();
echo $user->getName().&#39;<br />&#39;;//nostop
$teacher=new Teacher();
echo $teacher->getLengthofService().&#39;<br />&#39;;//23
//继承类实现接口
class GraduResultudent extends User implements TeacherInterface{ //继承User类 实现接口
    private $teacher;
    public function construct(){     //定义构造函数
        $this->teacher=new Teacher();  //实例化Teacher对象
    }
    public function getLengthOfService(){ //实现TeacherInterface接口的方法
        return $this->teacher->getLengthOfService();
    }
}
class Result{
    public static function getUserName(UserInterface $_user){ //注意:这里面的类型变成接口类型
        echo "Name is ".$_user->getName().&#39;<br />&#39;;
    }
    public static function getLengthOfService(TeacherInterface $_teacher){ //注意:这里面的类型变成接口类型
        echo "age is ".$_teacher->getLengthOfService();
    }
}
$object=new GraduResultudent();
Result::getUserName($object); //Name is nostop
Result::getLengthOfService($object); //age is 23
echo "<br />";
//接口实现用户的折扣
interface People{    //定义接口
    function getUserType();
    function getCount();
}
class VipUser implements People{ //实现接口
    //用户折卡系数
    private $discount=0.8;
    function getUserType(){
        return "VIP用户";
    }
    function getCount(){
        return    $this->discount;       
    }
}
$vip=new VipUser();    //实现化对象
echo $vip->getUserType().&#39;商品价格:&#39;.$vip->getCount()*100;  //VIP用户商品价格:80
class Goods{
    var $price=100;
    var $member;
    function run(People $member){ //注意:这里面的参数类型是接口类型
        $this->member=$member;
        $discount=$this->member->getCount();
        $usertype=$this->member->getUserType();
        echo $usertype."商品价格:".$this->price*$discount;
    }
}
$display=new Goods();
$display->run(new VipUser);//VIP用户商品价格:80
?>

以上是php中介面與抽象類別區別及如何定義及繼承介面實例程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn