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 = ''){ echo "son: ". $name ." speak skill. n"; } # 访问控制必须和父类中一样(或者更为宽松) protected function sport(){ echo "son sport skill. n"; } final public function notTeach(){ echo 'son has not to teach skill'; } } class Daughter extends Mother{ public function run($name = ''){ 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('Lily'); $grandChild = new GrandChild(); $grandChild->sport();
추상 클래스와 인터페이스의 차이점은 1. 인터페이스를 사용하는 것입니다. 추상 클래스의 사용은 키워드 확장을 통해 이루어집니다. 물론 인터페이스는 키워드 확장을 통해 상속될 수도 있습니다. 2. 멤버 변수(클래스 정적 변수 포함)는 인터페이스에서 선언할 수 없지만 클래스 상수는 선언할 수 있습니다. 데이터 캡슐화를 구현하기 위해 추상 클래스에서 다양한 유형의 멤버 변수를 선언할 수 있습니다. (또한 JAVA 인터페이스의 멤버 변수는 public static 최종 유형으로 선언되어야 합니다.)
3. 인터페이스에는 생성자가 없지만 추상 클래스에는 생성자가 있을 수 있습니다.
4. 인터페이스의 메서드는 기본적으로 공개 유형인 반면 추상 클래스의 메서드는 비공개, 보호 또는 공개로 수정될 수 있습니다.
추상 클래스 또는 인터페이스
밀접하게 관련된 일부 개체에서 채택할 모델을 만들고 싶다면 추상 클래스를 사용할 수 있습니다. 관련되지 않은 여러 개체에서 채택할 기능을 만들려면 인터페이스를 사용하세요. 동작이 여러 소스에서 상속되어야 하는 경우 인터페이스를 사용하세요. 모든 클래스가 공통 동작 구현을 공유한다는 것을 알고 있다면 추상 클래스를 사용하고 그 안에 해당 동작을 구현하세요.
위 내용은 인터페이스, 추상 클래스 및 PHP의 인터페이스와 추상 클래스 간의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!