> 백엔드 개발 > PHP 튜토리얼 > PHP의 인터페이스와 추상 클래스의 차이점과 인터페이스 인스턴스 코드를 정의하고 상속하는 방법에 대한 자세한 설명

PHP의 인터페이스와 추상 클래스의 차이점과 인터페이스 인스턴스 코드를 정의하고 상속하는 방법에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-12 13:02:01
원래의
1639명이 탐색했습니다.

추상 클래스와 인터페이스의 차이점

인터페이스는 모델의 사양이라고도 볼 수 있는 특별한 추상 클래스입니다. 인터페이스와 추상 클래스의 일반적인 차이점은 다음과 같습니다.

하위 클래스가 인터페이스를 구현하는 경우 인터페이스의 모든 메서드를 구현해야 합니다(필요 여부에 관계없이). 추상 클래스를 상속하는 경우 구현만 하면 됩니다. 필요한 방법.

인터페이스에 정의된 메서드 이름이 변경되면 이 인터페이스를 구현하는 모든 하위 클래스는 메서드 이름을 동기적으로 업데이트해야 하며 추상 클래스에서 메서드 이름이 변경되면 해당 하위 클래스의 해당 메서드 이름은 영향을 받지 않습니다. 그러나 변경될 것입니다. 이는 단지 새로운 메소드가 될 뿐입니다(이전 메소드 구현과 관련하여).

추상 클래스는 단일 방식으로만 상속될 수 있습니다. 하위 클래스가 여러 상위 클래스에서 상속되어야 하는 기능을 구현해야 하는 경우 인터페이스를 사용해야 합니다.

코드 예:

<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿