>  기사  >  백엔드 개발  >  PHP 객체 모델의 추상 메서드와 추상 클래스에 대한 기본 튜토리얼

PHP 객체 모델의 추상 메서드와 추상 클래스에 대한 기본 튜토리얼

伊谢尔伦
伊谢尔伦원래의
2017-07-03 09:21:461255검색

 객체 지향프로그램은 클래스의 계층 구조를 통해 구축됩니다. PHP와 같은 단일 상속 언어에서 클래스 상속은 트리와 유사합니다. 루트 클래스는 하나 이상의 하위 클래스를 가지며, 각 하위 클래스는 하나 이상의 클래스를 상속합니다. 하위 카테고리. 물론, 다양한 기능을 구현하는 데 사용되는 여러 루트 클래스가 있을 수 있습니다. 잘 설계된 아키텍처에서는 각 루트 클래스에 애플리케이션 코드에서 사용할 수 있는 유용한 인터페이스가 있어야 합니다. 애플리케이션 코드가 루트 클래스와 작동하도록 설계된 경우 루트 클래스에서 상속되는 모든 하위 클래스에서도 작동할 수 있습니다.

 추상 메서드는 하위 클래스의 일반 메서드에 대한 자리 표시자와 같습니다(자리를 차지하지만 작동하지 않음). 일반 메서드와는 다릅니다. 코드가 없습니다. 클래스에 하나 이상의 추상 메소드가 있는 경우 해당 클래스는 추상 클래스가 됩니다. 추상 클래스를 인스턴스화할 수 없습니다. 추상 클래스를 상속한 다음 하위 클래스를 인스턴스화해야 합니다. 추상 클래스를 하위 클래스의 템플릿으로 생각할 수도 있습니다.

 모든 추상 메서드를 재정의하면 하위 클래스는 일반 클래스가 됩니다. 모든 메서드가 재정의되지 않은 경우 하위 클래스는 여전히 추상입니다. 클래스에 추상 메서드가 포함되어 있으면(단 하나만 있더라도) class 키워드 앞에 abstract를 추가하여 클래스를 추상으로 선언해야 합니다.

 추상 메서드 선언 구문은 일반 메서드 선언 구문과 다릅니다. 추상 메서드는 일반 메서드처럼 중괄호 {} 안에 본문이 포함되지 않으며 세미콜론;으로 끝납니다.

 예제 6.13에서는 getArea 메서드를 포함하는 Shape 클래스를 정의했습니다. 하지만 모양을 모르면 도형의 면적을 가늠할 수 없기 때문에 getArea 메소드를 추상 메소드로 선언했습니다. Shape 개체를 인스턴스화할 수는 없지만 예제 6.13에서처럼 개체에서 상속하거나 expression에서 사용할 수 있습니다.

 추상 메서드만 사용하여 클래스를 만드는 경우 인터페이스를 정의합니다. 이러한 상황을 설명하기 위해 PHP에는 인터페이스가 있고 키워드를 구현합니다. extends 대신 추상 클래스 및 구현 대신 인터페이스를 사용하여 클래스 정의를 설명하거나 인터페이스를 사용할 수 있습니다. 예를 들어 myClass 구현 myIterface를 작성할 수 있습니다. 이 두 가지 방법은 개인 취향에 따라 선택할 수 있습니다.

/*참고:
두 메서드는 다음을 참조합니다.
1. abstract class aaa{}(aaa에는 추상 메서드만 있고 일반 메서드는 없음)
class bbb는 aaa를 확장합니다{}(aaa의 추상화를 덮어씁니다). bbb 메서드)
2. 인터페이스 aaa{}
class bbb는 aaa를 구현합니다{}(bbb의 aaa에 있는 추상 메서드 재정의)
*/

목록 6.13 추상 클래스

//abstract root class 抽象根类 
abstract class Shape 
{ 
 abstract function getArea(); //定义一个抽象方法 
}
//abstract child class 抽象子类 
abstract class Polygon extends Shape //多边形 
{ 
 abstract function getNumberOfSides(); 
}
//concrete class 实体类 三角形类 
class Triangle extends Polygon 
{ 
 public $base; 
 public $height;
 public function getArea() //覆写计算面积方法 
 { 
  return(($this->base * $this->height)/2); 
 }
 public function getNumberOfSides() //覆写边数统计方法 
 { 
  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(); //建立形状的集合,放入数组
//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($myCollection 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"); 
}

위 내용은 PHP 객체 모델의 추상 메서드와 추상 클래스에 대한 기본 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.