>백엔드 개발 >PHP 튜토리얼 >PHP 추상 클래스 코드 예제에 대한 자세한 설명

PHP 추상 클래스 코드 예제에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-03 09:33:081199검색

객체 지향프로그램은 클래스의 계층 구조를 통해 구축됩니다. PHP와 같은 단일 상속 언어에서 클래스 상속은 하나 이상의 하위 클래스를 가지며 각 하위 클래스는 이 클래스에서 상속됩니다. 물론, 서로 다른 기능을 구현하기 위해 여러 개의 루트 클래스가 있을 수 있습니다. 잘 설계된 시스템에서는 각 루트 클래스에 응용 프로그램 코드에서 사용할 수 있는 유용한 인터페이스가 있어야 합니다. 루트 클래스로 작업하려면 루트 클래스에서 상속된 모든 하위 클래스에서도 작동할 수 있습니다.

추상 메서드는 하위 클래스 자리 표시자의 일반 메서드와 동일하며(공간을 차지하지만 작동하지 않음) 일반 메서드와 다릅니다. 메서드 - 코드가 없습니다. 클래스에 하나 이상의 추상 메서드가 있으면 클래스는
추상 클래스
가 됩니다. 추상 클래스를 상속한 다음 하위 클래스를 인스턴스화해야 한다고 생각할 수도 있습니다. 모든 추상 메서드를 재정의하면 하위 클래스는 일반 클래스가 됩니다. 모든 메서드가 재정의되지 않으면 하위 클래스는 여전히 추상 메서드입니다. 1) 클래스 키워드 앞에 abstract를 추가하여 해당 클래스가 추상임을 선언해야 합니다.

선언 추상 메소드는 일반 메소드 선언과 구문이 다릅니다. {}는 일반 메서드와 유사하며 세미콜론으로 끝납니다.
다음 프로그램 파일에서는 getArea 메서드에 대한 Shape 클래스를 포함하는 프로그램을 정의합니다. 실제로 우리는 getArea 메소드를 추상 메소드로 선언했습니다. Shape 객체를 인스턴스화할 수는 없지만 이를 상속하거나
표현식
에서 사용할 수 있습니다. 추상 메소드만 사용하여 클래스를 생성하는 경우입니다. 이러한 상황을 설명하기 위해 PHP에는 인터페이스가 있고 키워드를 구현합니다. 추상 클래스 대신 인터페이스를 사용하거나
extends
대신 구현을 사용하거나 인터페이스를 사용할 수 있습니다. myClass가 myIterface를 구현하도록 작성할 수 있습니다. 코드

/*注: 
两种方法即指: 
1. abstract class aaa{} (注意aaa中只有抽象方法,没有一般方法) 
class bbb extends aaa{} (在bbb中覆写aaa中的抽象方法) 
2. interface aaa{} 
class bbb implements aaa{} (在bbb中覆写aaa中的抽象方法) 
*/ 
<?php 
//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) print("Area: ".$s->getArea()."<br>\n"); //如果$s是Shape类的实例 
if($s instanceof Polygon) print("Sides: ".$s->getNumberOfSides()."<br>\n"); 
if($s instanceof Color) print("Color:".$s->name."<br>\n"); 
print("<br>\n"); 
} 
?>

실행 결과:

Area: 35 
Sides: 4 
Area: 10 
Sides: 3 
Area: 28.274333882308 
Color:blue

위 내용은 PHP 추상 클래스 코드 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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