ホームページ >バックエンド開発 >PHPチュートリアル >PHP抽象クラスのコード例を詳しく解説

PHP抽象クラスのコード例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-03 09:33:081179ブラウズ

オブジェクト指向 プログラムはクラスの階層構造を通じて構築されます。PHP などの単一継承言語では、クラスの継承は 1 つ以上のサブクラスを持ち、各サブクラスはそこから継承します。もちろん、適切に設計されたシステムでは、アプリケーション コードで使用できる便利なインターフェイスが複数のルート クラスに存在する可能性があります。ルートクラスで動作するだけでなく、ルートクラスから継承するサブクラスでも動作します。

抽象メソッドは、サブクラスのプレースホルダー内の一般的なメソッドと同じであり (スペースを消費しますが、機能しません)、通常のメソッドとは異なります。メソッド - クラス内に 1 つ以上の抽象メソッドが存在する場合、そのクラスは
抽象クラス
になります。それらを継承してからサブクラスをインスタンス化することもできます。 すべての抽象メソッドをオーバーライドすると、クラスに抽象メソッドが含まれる場合でも、サブクラスは通常のクラスになります。 1)、class キーワードの前に abstract を追加して、クラスが抽象であることを宣言する必要があります。

宣言 抽象メソッドの構文は、一般メソッドを宣言する構文とは異なります。抽象メソッドには中括弧で囲まれた本体がありません。 {}は一般的なメソッドと同様にセミコロンで終わります。
以下のプログラムファイルでは、getAreaメソッドのクラスShapeを含むプログラムを定義していますが、図形の面積を知ることができないため、実際、getArea メソッドを抽象メソッドとして宣言しました。Shape オブジェクトをインスタンス化することはできませんが、例 6.13 のように、それを継承したり、

で使用したりすることはできます。この状況を説明するために、PHP には、interface およびimplements キーワードがあり、抽象クラスの代わりに Interface を使用したり、クラス定義を指定したり、インターフェイスを使用したりできます。 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
に基づいてこれら 2 つのメソッドを選択できます。

以上がPHP抽象クラスのコード例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。