首页  >  文章  >  后端开发  >  php中接口与抽象类区别及如何定义和继承接口实例代码详解

php中接口与抽象类区别及如何定义和继承接口实例代码详解

伊谢尔伦
伊谢尔伦原创
2017-07-03 10:19:091611浏览

抽象类和接口的区别

接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:

   一个子类如果 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