>백엔드 개발 >PHP 문제 >PHP에서 추상 클래스와 인터페이스의 차이점은 무엇입니까

PHP에서 추상 클래스와 인터페이스의 차이점은 무엇입니까

青灯夜游
青灯夜游원래의
2020-10-30 16:47:432999검색

차이점: 1. 추상 클래스는 속성, 일반 메서드 및 추상 메서드를 가질 수 있지만 인터페이스는 속성, 일반 메서드 및 상수를 가질 수 있습니다. 2. 추상 클래스는 abstract 키워드를 사용하여 클래스보다 먼저 선언되며 클래스는 다음과 같습니다. 클래스로 선언된 경우 인터페이스는 인터페이스로 선언되지만 인터페이스는 클래스가 아니기 때문에 클래스로 선언할 수 없습니다.

PHP에서 추상 클래스와 인터페이스의 차이점은 무엇입니까

권장: "PHP 비디오 튜토리얼"

객체 지향 개발의 경우 추상 클래스와 인터페이스는 상대적으로 이해하기 어렵습니다. 다음 기사에서는 PHP의 추상 클래스와 인터페이스의 차이점을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

추상 클래스: 클래스를 기반으로 하며 클래스 자체로 클래스를 직접 인스턴스화할 수 없는 특수 클래스입니다. 템플릿과 유사하게 사양을 지정한 후 하위 클래스는 세부 기능을 구현할 수 있습니다.

인터페이스: 주로 메서드 사양을 기반으로 하며, 추상 메서드보다 더 독립적이라는 점을 제외하면 추상 클래스의 추상 메서드와 약간 비슷합니다. 여러 메소드를 결합하여 클래스를 새로운 클래스로 결합할 수 있습니다.

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

1. 추상 클래스는 속성, 일반 메소드, 추상 메소드를 가질 수 있지만 인터페이스는 속성, 일반 메소드를 가질 수 없으며 상수를 가질 수 있습니다

2. 추상 클래스 메서드는 추상화되지만 인터페이스에는 "추상" 메서드가 있어야 합니다

3. 구문이 다릅니다

4. 추상 클래스는 abstract 키워드를 사용하여 클래스 앞에 선언되며, 클래스는 다음과 같이 선언됩니다. 클래스이고, 인터페이스는 인터페이스로 선언하지만, 인터페이스는 클래스가 아니기 때문에 클래스로 선언할 수 없습니다.

5. 추상 클래스의 추상 메서드는 추상으로 선언해야 하지만 인터페이스는 선언할 필요가 없습니다.

6. 추상 클래스는 하위 클래스가 상위 클래스를 상속할 수 있도록 하기 위해 확장 키워드를 사용합니다. 서브클래스에서. 인터페이스는 구현을 사용하여 일반 클래스가 클래스에서 인터페이스의 세부 메소드를 구현할 수 있도록 하고, 인터페이스는 한 번에 여러 메소드를 구현할 수 있습니다. 쉼표를 사용하여 각 인터페이스를 구분하면 됩니다.

Abstract 클래스:

  • Abstract 클래스 인스턴스화가 될 수 없으며, 그 역할은 상속받는 모든 클래스에 대한 인터페이스를 정의(또는 부분적으로 구현)하는 것입니다.

  • 추상 키워드를 사용하여 추상 클래스를 정의하세요.

  • 일반 클래스와 마찬가지로 추상 클래스에서 메서드와 속성을 만들 수 있습니다. 대부분의 경우 추상 클래스에는 추상 메서드도 하나 이상 포함되어 있습니다. 추상 메서드에는 메서드 선언만 있고 메서드 구현은 없습니다. 메소드 본문을 작성할 수 없습니다.

abstract class ShopProductWriter
{
    protected $product = [];

    /**
     * 抽象类中可以定义普通方法
     */
    public function addProduct($shopProduct)
    {
        $this->product = $shopProduct;
    }

    /**
     * 定义一个抽象方法,只有方法声明,没有方法实现
     */
    abstract public function write();
}
  • 추상 클래스에서 상속받는 모든 클래스는 모든 추상 메서드를 구현해야 합니다. 그렇지 않으면 추상 클래스 자체로 정의되어야 합니다. 서브클래스는 추상 메서드를 구현할 수 없으며 메서드 서명도 준수해야 합니다. 이는 구현 메소드가 추상 메소드보다 더 엄격한 액세스 제어를 가질 수 없음을 의미합니다. 또한 구현 메서드에는 추상 메서드와 동일한 수의 매개변수와 동일한 유형 힌트가 있어야 합니다.

class XmlProductWriter extends ShopProductWriter
{
    /**
     * 任何继承自抽象类的类都必须实现所有的抽象方法
     */
    public function write()
    {
        echo 'XmlProductWriter';
    }
}

인터페이스:

  • 추상 클래스를 사용하면 일부 구현을 제공할 수 있지만 인터페이스는 순수한 템플릿입니다. 인터페이스는 기능만 정의하며 구현을 가질 수 없습니다. 속성 및 메서드 선언은 있을 수 있지만 메서드 본문은 있을 수 없습니다.

  • 인터페이스를 선언하려면 인터페이스 키워드를 사용하세요.

interface Price
{
    /**
     * 只有方法声明,没有方法实现
     */
    public function getPrice();
}
  • 이 인터페이스를 구현하는 모든 클래스는 이 인터페이스에서 정의된 모든 메서드를 구현해야 합니다. 그렇지 않으면 이 클래스는 추상 클래스로만 선언될 수 있습니다.

  • 클래스 선언에 Implements 키워드를 사용하여 인터페이스를 구현하도록 할 수 있습니다.

class ShopProduct implements Price
{
    protected $price;

    public function getPrice()
    {
        // TODO: Implement getPrice() method.
        return $this->price;
    }
}
  • 구현 클래스는 구현하는 인터페이스와 동일한 유형을 갖습니다.

  • 클래스는 상위 클래스를 상속하면서 여러 인터페이스를 구현할 수 있습니다. Implements 키워드 뒤에는 쉼표로 구분된 여러 인터페이스 이름이 옵니다.

관련 권장 사항: php training

위 내용은 PHP에서 추상 클래스와 인터페이스의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.