대상 프로그램 을 대상 으로 클래스 의 계층 구 조 를 통 해 구 축 됩 니 다.단일 계승 언어,예 를 들 어 PHP 에서 클래스 의 계승 은 트 리 모양 입 니 다.하나의 뿌리 류 는 하나 이상 의 하위 클래스 가 있 고 모든 하위 클래스 에서 하나 이상 의 하위 클래스 를 계승 합 니 다.물론 여러 개의 루트 가 존재 하여 서로 다른 기능 을 실현 할 수 있 습 니 다.좋 은 디자인 시스템 에서모든 루트 클래스 는 유용 한 인터페이스 가 있어 야 합 니 다.응용 코드 에 사용 할 수 있 습 니 다.만약 에 우리 의 응용 코드 가 루트 와 함께 작 동 하도록 설계 된다 면 루트 에서 물 려 받 은 모든 하위 클래스 와 합작 할 수 있 습 니 다.추상 적 인 방법 은 하위 클래스 의 일반적인 방법(한 곳 을 차지 하지만 역할 을 하지 않 습 니 다)과 같 습 니 다.그것 은 일반적인 방법 과 다 릅 니 다.코드 가 없습니다.만약 에 클래스 에 하나 이상 의 추상 적 인 방법 이 존재 한다 면 이 종 류 는 추상 적 인 유형 이 됩 니 다.추상 적 인 종 류 를 예화 할 수 없습니다.그 다음 에 사례 화 자 류 를 계승 해 야 합 니 다.추상 적 인 종 류 를 하위 클래스 의 모델 로 볼 수도 있 습 니 다.만약 에 모든 추상 적 인 방법 을 복작 한다 면하위 클래스 는 일반적인 클래스 가 됩 니 다.모든 방법 을 덮어 쓰 지 않 았 다 면 하위 클래스 는 추상 적 입 니 다.만약 한 클래스 에 추상 적 인 방법(하나만 이라도)이 포함 되 어 있다 면,당신 은 이 클래스 가 추상 적 이 라 고 성명 해 야 합 니 다.class 키워드 앞 에 abstract 를 붙 입 니 다.추상 적 인 방법 을 설명 하 는 문법 은 일반적인 방법 과 다 릅 니 다.추상 적 인 방법 은 일반적인 방법 처럼 대괄호{}에 포 함 된 주체 부분 이 없고 분점 을 사용 합 니 다.끝 냅 니 다.예 6.13 에서 우 리 는 getArea 방법 을 포함 하 는 클래스 Shape 를 정 의 했 습 니 다.그러나 모양 을 모 르 기 때문에 도형 의 면적 을 정할 수 없습니다.getArea 방법 을 추상 적 인 방법 이 라 고 밝 혔 습 니 다.Shape 대상 을 예화 할 수 는 없 지만 계승 하거나 표현 식 에서 사용 할 수 있 습 니 다.예 6.13 에서 처럼 추상 적 인 방법 만 있 는 클래스 를 만 들 면 인터페이스(interface)를 정의 합 니 다.이러한 상황 을 설명 하기 위해 PHP 에는 interface 와 implements 키워드 가 있 습 니 다.추상 적 인 클래스 대신 interface 를 사용 할 수 있 습 니 다.extends 대신 implements 로 클래스 정 의 를 설명 하거나 인 터 페 이 스 를 사용 할 수 있 습 니 다.예 를 들 어,my Class implements my Iterface 를 쓸 수 있 습 니 다.이 두 가지 방법 은 개인 적 인 선 호 에 따라 선택 할 수 있 습 니 다./*주:두 가지 방법 은 1.abstract class aa{}을 말 합 니 다.일반적인 방법 이 없 음)class bbb extends aaa{}(bbb 에 aaa 를 덮어 쓰 는 추상 적 인 방법)2.interface aaa{}class bbb implements aaa{}(bbb 에 aaa 를 덮어 쓰 는 추상 적 인 방법)*/Listing 6.13 Abstract classes
base*$this->height)/2);}public function getNumberOfSides()file://덮어 쓰기 변수 통계 방법{return(3);}//concrete class 실체 클래스 사각형 class Rectangle extends Polygon{public$width;public $height; public function getArea() { return($this->width * $this->height); } public function getNumberOfSides() { return(4); } } //concrete class 실체 클래스 원형 class Circle extends Shape{public$radius;public function getArea() { return(pi() * $this->radius * $this->radius); } } //concrete root class 는 색상 클래스 class Color{public$name;}$를 정의 합 니 다.myCollection = array(); file://모양 의 집합 을 만 들 고 배열/make a rectangle$r=new Rectangle;$r->width = 5; $r->height = 7; $myCollection[] = $r; unset($r); //make a triangle $t = new Triangle; $t->base = 4; $t->height = 5; $myCollection[] = $t; unset($t); //make a circle $c = new Circle; $c->radius = 3; $myCollection[] = $c; unset($c); //make a color $c = new Color; $c->name = "blue"; $myCollection[] = $c; unset($c); foreach($my Collection as$s){if($s instanceof Shape)file:/$s 가 Shape 류 의 인 스 턴 스 라면{print("Area:".$s->getArea()."
n");}if($s instanceof Polygon) { print("Sides: " . $s->getNumberOfSides() . "
n"); } if($s instanceof Color) { print("Color: $s->name
n"); } print("
n"); } ?>