もちろん、適切に設計されたシステムでは、アプリケーション コードがルート クラスで動作するように設計されている場合、各ルート クラスに便利なインターフェイスが必要です。
抽象メソッドは、サブクラス内の一般的なメソッドのプレースホルダーです (領域を占有しますが、機能しません)。通常のメソッドとは異なります。コードがない場合、クラス内に 1 つ以上の抽象メソッドが存在する場合、そのクラスは抽象クラスをインスタンス化してからサブクラスをインスタンス化する必要があります。
すべての抽象メソッドをオーバーライドすると、クラスに抽象メソッドが 1 つだけ含まれている場合でも、サブクラスは通常のクラスになります。
抽象メソッドの宣言 構文は、一般的なメソッドの宣言とは異なります。抽象メソッドには、本体が含まれません。一般的なメソッドと同様に中括弧{}を付け、セミコロンで終了します;
以下のプログラムファイルでは、ShapeクラスのgetAreaメソッドを含むメソッドを定義していますが、これがないと図形の面積を求めることができません。形状がわかっているので、実際に getArea メソッドを抽象メソッドとして宣言しました。Shape オブジェクトをインスタンス化することはできませんが、例 6.13 のように、それを継承したり、式で使用したりできます。この状況を説明するために、PHP には、抽象クラスの代わりにインターフェイスを使用し、extends の代わりに実装を使用して、クラス定義を指定したり、インターフェイスを使用したりできます。 myClass を実装して myIterface を作成できます。個人の好みに基づいてこれら 2 つのメソッドから選択できます。
コードをコピーします。
コードは次のとおりです。 /*注: 2 つのメソッドは、
1 . 抽象クラス aaa{} (aaa には抽象メソッドのみがあり、一般メソッドはないことに注意してください)class bbb extends aaa{} (bbb の aaa の抽象メソッドを上書きします)
2. インターフェース aaa{}
class bbb extends aaa{} (bbb の aaa の抽象メソッドを上書きします)
*/
//抽象ルートクラス抽象ルートクラス
抽象クラス Shape
{
抽象関数 getArea() //抽象メソッドを定義します
}
//抽象子クラス抽象サブクラス
抽象クラス Polygon extends Shape //Polygon
{
抽象関数 getNumberOfSides()
}
//具象クラス エンティティ クラス;トライアングルクラス
class Triangle extends Polygon
{
public $base;
public $ height;
public function getArea() //面積計算メソッドをオーバーライドします
{
return (($this->base * $this->height)/2);
}
public function getNumberOfSides() //サイドカウントメソッドをオーバーライドします
{
return(3) ;
}
}
//具体的なクラス エンティティ クラス 四角形
クラス Rectangle extends Polygon
{
public $width; public function getArea; ()
{
return($this->width * $this->height );
}
public function getNumberOfSides()
{
return(4);
}
}
//具体的なクラス エンティティ クラス Circle
class Circle extends Shape
{
public $radius;
public function getArea()
{
return(pi() * $this->radius * $this->radius);
}
}
//具体的なルート クラスはカラー クラスを定義します
class Color
{
public $name;
}
$myCollection = array() / / 図形のコレクションを作成し、配列に入れます
// 四角形を作成します
$r = new長方形;
$r->幅 = 5;
$myCollection[] = $r>/ /三角形を作成します
$t = 新しい三角形;
$t->height = 5; >unset($t);
// 円を作成します
$c->radius = 3; unset($c);
//色を作成します
$c = 新しい色;
$myCollection[] = $c; >unset($c);
foreach($myCollection as $s)
{
if ($s インスタンス) print("Area: ".$s->getArea()."< ;br>n"); //$s が Shape クラスのインスタンスの場合
if($s instanceof Polygon ) print("Sides: ".$s->getNumberOfSides()."
; n");
if($s instanceof Color) print("Color:".$s->name. "
n");
print("
n") ;
}
?>
実行結果:
エリア: 35
サイド: 4
エリア: 10
サイド: 3
エリア: 28.274333882308
カラー: ブルー