PHP 5.0 대상 모델 탐색 의 추상 적 방법 과 추상 류

3434 단어 PHHPP5500 대대상
대상 프로그램 을 대상 으로 클래스 의 계층 구 조 를 통 해 구축 되 었 습 니 다.단일 계승 언어 인 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 aaa{}(aaa 에 추상 적 인 방법 만 있 고 일반적인 방법 은 없습니다)class bbb extends aaa{}(bbb 에 aaa 의 추상 적 인 방법 을 덮어 씁 니 다)2.interface aaa{}class bbb implements aaa{}(bbb 에 aaa 의 추상 적 인 방법 을 덮어 씁 니 다)*/
Listing 6.13 Abstract classes
//abstract root class 추상 루트 클래스 abstract class Shape{abstract function getArea();/추상 적 인 방법 정의}
//abstract child class 추상 하위 클래스 추상 클래스 다각형 extends Shape//다각형{abstract function getNumberOfSides();}
//concrete class 실체 류 삼각형 클래스 Triangle extends Polygon{public$base; public $height;
public function getArea()//덮어 쓰기 면적 계산 방법{return($this->base*$this->height)/2); }
public function getNumberOfSides()/덮어 쓰기 변수 통계 방법{return(3); } }
//configrete class 실체 클래스 사각형 class Rectangle extends Polygon{public$width; public $height;
 public function getArea()  {   return($this->width * $this->height);  }
 public function getNumberOfSides()  {   return(4);  } }
//configrete class 실체 클래스 원형 class Circle extends Shape{public$radius;
 public function getArea()  {   return(pi() * $this->radius * $this->radius);  } }
//configrete root class 는 색상 클래스 class Color{public$name;}을 정의 합 니 다.
$myCollection = array(); //모양 의 집합 을 만들어 배열 에 넣 습 니 다.
//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)//$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"); }
?>

좋은 웹페이지 즐겨찾기