PHP에서 인터페이스와 추상 클래스의 차이점은 무엇입니까
차이점은 다음과 같습니다. 1. 인터페이스는 인터페이스 키워드를 통해 정의되고 추상 클래스는 추상 키워드를 통해 정의됩니다. 2. 인터페이스에는 데이터 멤버가 없지만 추상 클래스에는 데이터 멤버가 있으며 추상 클래스는 다음을 수행할 수 있습니다. 3. 인터페이스에는 생성자가 없지만 추상 클래스에는 생성자가 있을 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터
1 추상 클래스와 인터페이스의 차이점
PHP 객체 지향을 배울 때 항상 집중하게 됩니다. 추상 클래스와 인터페이스에 대해 혼란스럽습니다. 기능이 거의 동일할 때 하나를 빼면 왜 그렇게 쉽게 혼동됩니까? 그러나 사실 둘 사이의 차이는 여전히 매우 큽니다. PHP의 두 가지 방법을 잘 활용할 수 있다면 객체 지향 프로그래밍이 더 합리적이고 명확하며 효율적일 것입니다.
a. 인터페이스는 인터페이스 키워드를 통해 정의되고, 추상 클래스는 추상 키워드를 통해 정의됩니다.
b. 인터페이스의 사용은 키워드 구현을 통해 이루어지며, 추상 클래스의 작업은 클래스 상속의 키워드 확장을 사용하여 구현됩니다.
c. 인터페이스에는 데이터 멤버가 없지만 추상 클래스에는 데이터 멤버가 있고 추상 클래스는 데이터를 캡슐화할 수 있습니다.
d. 인터페이스에는 생성자가 없지만 추상 클래스에는 생성자가 있을 수 있습니다.
e. 인터페이스의 메소드는 모두 공개 유형인 반면 추상 클래스의 메소드는 비공개, 보호 또는 공개로 수정될 수 있습니다.
f. 클래스는 동시에 여러 인터페이스를 구현할 수 있지만 추상 클래스는 하나만 구현할 수 있습니다.
동일한 점: 추상 메서드와 인터페이스의 함수 본문에는 두 개의 중괄호조차 쓸 수 없습니다. ! ! 예를 들면 다음과 같습니다. function getName();
2. 인터페이스
인터페이스(인터페이스)를 사용하면 특정 클래스가 구현해야 하는 메서드를 지정할 수 있지만 이러한 메서드의 특정 내용을 정의할 필요는 없습니다. 행동 양식.
인터페이스는 표준 클래스 정의와 마찬가지로 인터페이스 키워드를 통해 정의되지만, 여기에 정의된 모든 메서드는 비어 있습니다.
인터페이스에 정의된 모든 메소드는 공개되어야 합니다. 이는 인터페이스의 특징입니다.
Implementations
인터페이스를 구현하려면 Implements 연산자를 사용하세요. 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 합니다. 그렇지 않으면 치명적인 오류가 보고됩니다. 클래스는 여러 인터페이스를 구현할 수 있습니다. 쉼표를 사용하여 여러 인터페이스의 이름을 구분하세요.
참고:
여러 인터페이스를 구현할 때 인터페이스의 메서드는 동일한 이름을 가질 수 없습니다.
참고:
extends 연산자를 사용하여 인터페이스를 상속할 수도 있습니다.
참고:
인터페이스를 구현하려면 클래스는 인터페이스에 정의된 메서드와 정확히 동일한 메서드를 사용해야 합니다. 그렇지 않으면 치명적인 오류가 발생합니다.
상수
상수는 인터페이스에서도 정의할 수 있습니다. 인터페이스 상수는 클래스 상수와 정확히 동일하게 사용되지만 하위 클래스나 하위 인터페이스로 재정의될 수 없습니다.
<?php // 声明一个'iTemplate'接口 interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 实现接口 // 下面的写法是正确的 class Template implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; } } // 下面的写法是错误的,会报错,因为没有实现 getHtml(): // Fatal error: Class BadTemplate contains 1 abstract methods // and must therefore be declared abstract (iTemplate::getHtml) class BadTemplate implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } } ?> Example #2 可扩充的接口 <?php interface a { public function foo(); } interface b extends a { public function baz(Baz $baz); } // 正确写法 class c implements b { public function foo() { } public function baz(Baz $baz) { } } // 错误写法会导致一个致命错误 class d implements b { public function foo() { } public function baz(Foo $foo) { } } ?> Example #3 继承多个接口 <?php interface a { public function foo(); } interface b { public function bar(); } interface c extends a, b { public function baz(); } class d implements c { public function foo() { } public function bar() { } public function baz() { } } ?> Example #4 使用接口常量 <?php interface a { const b = 'Interface constant'; } // 输出接口常量 echo a::b; // 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。 class b implements a { const b = 'Class constant'; } ?>
http://php.net/manual/zh/언어.oop5.interfaces.php
3. 추상 클래스
PHP 5는 추상 클래스와 추상 메서드를 지원합니다. abstract로 정의된 클래스는 인스턴스화할 수 없습니다. 적어도 하나의 메소드가 추상으로 선언된 경우 모든 클래스는 추상으로 선언되어야 합니다. abstract로 정의된 메서드는 호출 메서드(매개변수)만 선언하고 특정 함수 구현을 정의할 수는 없습니다.
추상 클래스를 상속할 때 하위 클래스는 상위 클래스의 모든 추상 메서드를 정의해야 하며, 이러한 메서드의 액세스 제어는 상위 클래스와 동일하거나 더 완화되어야 합니다. 예를 들어 추상 메서드가 protected로 선언된 경우 하위 클래스에 구현된 메서드는 protected 또는 public으로 선언되어야 하며 private으로 정의할 수 없습니다. 또한 메서드를 호출하는 메서드가 일치해야 합니다. 즉, 필수 매개변수의 유형과 개수가 일관되어야 합니다. 예를 들어, 하위 클래스가 상위 클래스의 추상 메서드 선언에 포함되지 않은 선택적 매개 변수를 정의하는 경우 두 선언 간에 충돌이 없습니다. 이는 PHP 5.4 이후의 생성자에도 적용됩니다. PHP 5.4 이전의 생성자 선언은 다를 수 있습니다.
<?php abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."\n"; ?> 以上例程会输出: ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2 Example #2 抽象类示例 <?php abstract class AbstractClass { // 我们的抽象方法仅需要定义需要的参数 abstract protected function prefixName($name); } class ConcreteClass extends AbstractClass { // 我们的子类可以定义父类签名中不存在的可选参数 public function prefixName($name, $separator = ".") { if ($name == "Pacman") { $prefix = "Mr"; } elseif ($name == "Pacwoman") { $prefix = "Mrs"; } else { $prefix = ""; } return "{$prefix}{$separator} {$name}"; } } $class = new ConcreteClass; echo $class->prefixName("Pacman"), "\n"; echo $class->prefixName("Pacwoman"), "\n"; ?> 以上例程会输出: Mr. Pacman Mrs. Pacwoman 老代码中如果没有自定义类或函数被命名为“abstract”,则应该能不加修改地正常运行。
http://php.net/manual/zh/언어.oop5.abstract.php
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP에서 인터페이스와 추상 클래스의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.
