소개
객체 지향 프로그래밍에서 추상 클래스는 인스턴스화할 수 있는 클래스입니다. 즉, 이러한 클래스의 객체를 선언할 수 없습니다. PHP는 버전 5.0부터 abstarct 클래스의 개념을 지원합니다.
abstract 키워드로 정의된 클래스는 추상 클래스가 됩니다. 또한 하나 이상의 추상 메서드를 포함하는 모든 클래스도 추상으로 간주됩니다.
구문
<?php class testclass{ // } ?>
이 클래스의 객체를 생성하려고 하면 PHP 파서는 다음과 같은 오류를 발생시킵니다 -
$a=new testclass(); PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass
추상 방법
추상 메서드는 형식 힌트가 있는 서명, 즉 가시성, 인수 및 반환 유형만 선언하고 기능이 없습니다. 이러한 추상 클래스를 상속하는 클래스는 모든 추상 메서드를 재정의(정의 제공)해야 합니다. 자식 클래스의 해당 메서드는 부모 클래스와 동일한 서명을 가져야 합니다. 자식 클래스가 이 조건을 충족하지 않으면 PHP 파서에서 예외가 발생합니다. 추상 클래스를 확장하는 클래스는 이제 인스턴스화할 수 있으므로 구체 클래스라고 합니다.
다음 예제에서 부모 클래스에는 두 개의 추상 메서드가 있으며 그 중 하나만 자식 클래스에서 재정의됩니다. 이로 인해 다음과 같은 오류가 발생합니다. -
예시
<?php abstract class testclass{ abstract function test1(); abstract function hello(); } class myclass extends testclass{ function test1(){ echo "Overrides parent test method"; } } $a=new myclass(); ?>
출력
다음은 오류 메시지입니다.
PHP Fatal error: Class myclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testclass::hello)
인수를 포함하는 추상 메서드
추상 메소드가 인수로 정의되면 동일한 수의 인수로 자식 클래스에서 재정의해야 합니다.
다음 예에서 상위 클래스의 추상 메소드에는 두 개의 인수가 있습니다. 자식 클래스도 두 개의 인수로 동일한 함수를 정의합니다.
예시
<?php abstract class testclass{ abstract function hello($name, $age); } class myclass extends testclass{ function hello($name, $age){ echo "My name is $name and my age is $age"; } } $a=new myclass(); $a->hello("Ravi",20); ?>
출력
이것은 다음과 같은 출력을 생성합니다 -
My name is Ravi and my age is 20