이 글에서는 PHP 추상 클래스와 인터페이스의 차이점을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
추상 클래스
공식 설명은 문서를 확인하세요. 다음은 공식 설명을 단순화한 것입니다.
또한 메소드를 호출하는 메소드가 일치해야 합니다. 즉, 필수 매개변수의 유형과 개수가 일치해야 합니다. 예를 들어 하위 클래스가 선택적 매개 변수(
함수 eat($a,$b=1)와 유사, $b는 선택적 매개 변수)를 정의하지만 상위 클래스의 추상 메서드 선언에는 포함되지 않습니다. 클래스를 선언한 다음 둘 다 선언하면 충돌이 없습니다. 이는 PHP 5.4 이후의 생성자에도 적용됩니다. PHP 5.4 이전의 생성자 선언은 다를 수 있습니다.
추가됨:
2. 누군가 질문했습니다. 추상 메서드를 비공개로 정의할 수 있습니까? 대답은 '아니요'입니다. 왜냐하면 추상 인터페이스의 목적은 상속을 위해 클래스 모델을 추상화하는 것이기 때문입니다. 비공개로 정의하면 외부에서 액세스할 수 없습니다. 설계 목적상 오류가 보고됩니다. 3. 추상 클래스는 인터페이스를 구현할 수 있으며 인터페이스에 메서드를 구현할 필요가 없습니다abstract class AbstractClass
{
// 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{}
abstract protected function getValue ();
abstract protected function prefixValue ( $prefix );
// 普通方法(非抽象方法)
public function printOut () {
print $this -> getValue () . "\n" ;
}
}
4. 추상 클래스는 추상 클래스를 상속할 수 있으며
abstract class Sutdent extends Human { abstract private function study(); } Fatal error: Abstract function Sutdent::study() cannot be declared private in ...Interface
1. 인터페이스의 정의
인터페이스(인터페이스)를 사용하면 특정 클래스가 어떤 메소드를 구현해야 하는지 지정할 수 있지만, 특정 클래스를 정의할 필요는 없습니다. 이러한 방법의 내용.
인터페이스는 표준 클래스 정의와 마찬가지로 인터페이스 키워드를 통해 정의되지만, 그 안에 정의된 모든 메소드는 비어 있습니다. 인터페이스에 정의된 모든 메소드는 공개되어야 합니다. 이는 인터페이스의 특성이며 비공개는 오류를 보고합니다(치명적인 오류: 인터페이스 메소드에 대한 액세스 유형).
abstract class Human { abstract function eat(); } abstract class Sutdent extends Human { abstract function study(); //abstract function eat(); 若重写抽象父类的抽象方法eat()会报错 Fatal error: Can't inherit abstract function Human::eat() (previously declared abstract in Sutdent) in ... }
연산자를 사용하세요. 비추상 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 합니다. 그렇지 않으면 치명적인 오류가 보고됩니다. 클래스는 여러 인터페이스를 구현할 수 있습니다. 쉼표를 사용하여 여러 인터페이스의 이름을 구분하세요. Supplement:
추상 클래스 상속과 인터페이스 구현을 동시에 할 수 있으며 확장은 앞에 작성해야 합니다. 추상 클래스는 인터페이스를 구현하므로 해당 클래스의 메서드를 다시 만들 필요가 없습니다.
여러 인터페이스를 구현할 때 인터페이스의 메서드는 동일한 이름을 가질 수 없습니다. extends 연산자를 사용하여 인터페이스를 상속할 수도 있습니다.
interface Play { const LEVEL=10; public function PlayLOL(); public function PlayFootball(); }
행의 D:11index.php에 있는 인터페이스가 아닙니다.)interface Play
{
const LEVEL=10;
public function PlayLOL();
public function PlayFootball();
}
interface Read
{
public function ReadNovel();
}
abstract class Human
{
abstract function eat();
}
//抽象类可以实现接口后不实现其方法,可以继承一个抽象类的同时实现多个接口注意必须要把extends语句写在implements前面,否则会报错
abstract class Sutdent extends Human implements Play,Read
{
abstract function study();
}
1 . 인터페이스 상속을 위해 구현을 사용하고 추상 클래스를 확장합니다.
2. 인터페이스에서는 변수를 선언할 수 없지만 추상 클래스에서는 다양한 변수를 선언할 수 있습니다.3. 인터페이스에는 생성자가 없습니다. 클래스는 다음을 가질 수 있습니다. 4. 인터페이스의 메서드는 기본적으로 공개되며 추상 클래스의 메서드는 공개, 보호 및 비공개로 수정될 수 있습니다
5. 클래스는 여러 인터페이스를 상속할 수 있지만 추상 클래스는 하나만 상속할 수 있습니다관련 권장 사항: PHP 튜토리얼
위 내용은 PHP 추상 클래스와 인터페이스의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!