>  기사  >  백엔드 개발  >  인터페이스, 추상 클래스 및 PHP의 인터페이스와 추상 클래스 간의 차이점에 대한 자세한 설명

인터페이스, 추상 클래스 및 PHP의 인터페이스와 추상 클래스 간의 차이점에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-03 09:42:5014244검색

인터페이스, 추상 클래스 및 PHP의 인터페이스와 추상 클래스 간의 차이점에 대한 자세한 설명

PHP의 인터페이스 추상 클래스 Final 및 Static은 매우 간단하며 특히 대규모 웹 사이트 아키텍처에 유용합니다. 오늘은 PHP의 추상 클래스 Final 및 Static의 예를 살펴보겠습니다.

1. 인터페이스
(1) 인터페이스 사용은 키워드 구현을 통해 이루어집니다.
(2) 인터페이스는 멤버 변수(클래스 정적 변수 포함)를 정의할 수 없지만 상수는 정의할 수 있습니다.
(3) 서브클래스는 다음을 구현해야 합니다. 인터페이스 정의 모든 메소드
(4) 인터페이스는 메소드를 정의만 할 수 있지만 구현은 할 수 없습니다
(5) 인터페이스에 생성자가 없습니다
(6) 인터페이스의 메소드와 이를 구현하는 클래스는 기본적으로 모두 공개 유형입니다
2. 추상 클래스
( 1) 추상 클래스의 사용은 키워드 확장을 통해 이루어집니다.
(2) 인스턴스화할 수 없으며 하위 클래스가 구현해야 하는 메서드를 정의할 수 있습니다.
(3) 하위 클래스는 상위 클래스의 모든 추상 메서드를 정의해야 합니다. 클래스 및 이러한 메소드의 액세스 제어는 상위 클래스와 동일해야 합니다(또는 더 완화됨)
(4) 클래스에 추상 메소드가 있는 경우 클래스는 추상 클래스로 정의되어야 합니다
(5) 추상 클래스에는 생성자가 있을 수 있습니다
(6) 추상 클래스에서는 비공개, 보호 및 공개를 사용하여 메서드를 수정할 수 있습니다.
(7) 클래스는 동시에 여러 인터페이스를 구현할 수 있지만 클래스는 하나의 추상 클래스에서만 상속할 수 있습니다.
3. 최종 클래스/메서드
(1) 최종 클래스를 상속할 수 없음
(2) 최종 메서드를 재정의할 수 없음
4. 정적 클래스/메서드
(1) 클래스를 인스턴스화하지 않고 직접 액세스할 수 있음
(2) 정적 속성 -> 연산자를 통해 객체에 액세스할 수 없습니다.

Example

<?php
# 接口
interface Human{
    const TEST_CONST = "test const"; // 定义常量
    // public $v; // error,不能定义变量
    // static $count; // error,不能定义变量
    public function speak();
    public function walk();
    public function run();
}
     
# 抽象类
abstract class Father implements Human{
     
    public function construct(){
        echo "father init n";
    }
     
    abstract public function walk(); // 抽象方法
     
    public function speak(){
        echo "father speak skill n";
    }
     
    public function run(){
        echo "father run skill n";
    }
}
     
# 非抽象类
class Mother implements Human{
     
    public function construct(){
        echo "mother init n";
    }
     
    # 这里必须实现walk方法
    public function walk(){
        echo "mother walk skill n"; 
    } 
     
    public function speak(){
        echo "mother speak skill n";
    }
     
    public function run(){
        echo "mother run skill n";
    }
}
     
class Son extends Father{
     
    public function walk(){
        echo "son walk skill. n";
    }
     
    public function speak($name = &#39;&#39;){
        echo "son: ". $name ." speak skill. n";
    }
     
    # 访问控制必须和父类中一样(或者更为宽松)
    protected function sport(){
        echo "son sport skill. n";
    }
     
    final public function notTeach(){
        echo &#39;son has not to teach skill&#39;;
    }
}
     
class Daughter extends Mother{
     
    public function run($name = &#39;&#39;){
        echo "daughter run skill. n";
    }
     
}
     
final class GrandChild extends Son{
         
    # 访问控制必须和父类中一样(或者更为宽松)
    public function sport(){
        echo "GrandChild sport skill. n";
    }
     
    # Cannot override final method Son::notTeach()
    // public function notTeach(){} // error
}
     
#  Class Orphan may not inherit from final class (GrandChild)
// class Orphan extends GrandChild{}  // error
     
$son = new Son();
$son->speak("Suly");
     
$daughter = new Daughter();
$daughter->run(&#39;Lily&#39;);
     
$grandChild = new GrandChild();
$grandChild->sport();

추상 클래스와 인터페이스의 차이점은 1. 인터페이스를 사용하는 것입니다. 추상 클래스의 사용은 키워드 확장을 통해 이루어집니다. 물론 인터페이스는 키워드 확장을 통해 상속될 수도 있습니다. 2. 멤버 변수(클래스 정적 변수 포함)는 인터페이스에서 선언할 수 없지만 클래스 상수는 선언할 수 있습니다. 데이터 캡슐화를 구현하기 위해 추상 클래스에서 다양한 유형의 멤버 변수를 선언할 수 있습니다. (또한 JAVA 인터페이스의 멤버 변수는 public static 최종 유형으로 선언되어야 합니다.)

3. 인터페이스에는 생성자가 없지만 추상 클래스에는 생성자가 있을 수 있습니다.


4. 인터페이스의 메서드는 기본적으로 공개 유형인 반면 추상 클래스의 메서드는 비공개, 보호 또는 공개로 수정될 수 있습니다.

5. 클래스는 동시에 여러 인터페이스를 구현할 수 있지만 클래스는 하나의 추상 클래스에서만 상속할 수 있습니다.

추상 클래스 또는 인터페이스

밀접하게 관련된 일부 개체에서 채택할 모델을 만들고 싶다면 추상 클래스를 사용할 수 있습니다. 관련되지 않은 여러 개체에서 채택할 기능을 만들려면 인터페이스를 사용하세요. 동작이 여러 소스에서 상속되어야 하는 경우 인터페이스를 사용하세요. 모든 클래스가 공통 동작 구현을 공유한다는 것을 알고 있다면 추상 클래스를 사용하고 그 안에 해당 동작을 구현하세요.

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

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