オブジェクト指向プログラムは、クラスの階層構造を通じて構築されます。PHP などの単一継承言語では、クラスの継承は 1 つ以上のサブクラスを持ち、各サブクラスから 1 つ以上のサブクラスが継承されます。さらに次のレベルのサブカテゴリ。もちろん、異なる機能を実装するために複数のルート クラスが使用される場合もあります。適切に設計されたシステムでは、各ルート クラスに、アプリケーション コードで使用できる便利なインターフェイスが必要です。アプリケーション コードがルート クラスで動作するように設計されている場合は、ルート クラスを継承するサブクラスでも動作できます。
抽象メソッドは、サブクラス内の通常のメソッドと同様にプレースホルダーです (場所を占めますが、機能しません)。通常のメソッドとは異なり、コードがありません。クラス内に 1 つ以上の抽象メソッドがある場合、そのクラスは抽象クラスになります。抽象クラスをインスタンス化することはできません。抽象クラスを継承してからサブクラスをインスタンス化する必要があります。また、抽象クラスをサブクラスのテンプレートとして考えることもできます。
すべての抽象メソッドをオーバーライドすると、サブクラスは通常のクラスになります。すべてのメソッドがオーバーライドされない場合でも、サブクラスは抽象メソッドのままです。クラスに抽象メソッドが含まれる場合は (たとえ 1 つしかない場合でも)、class キーワードの前に abstract を追加して、クラスを抽象として宣言する必要があります。
抽象メソッドの宣言の構文は、一般メソッドの宣言の構文とは異なります。抽象メソッドは、一般メソッドのように中括弧 {} で囲まれた本体を持たず、セミコロン;で終わります。
例 6.13 では、getArea メソッドを含むクラス Shape を定義します。ただし、図形の形状が分からないと面積を求めることができないため、getArea メソッドを抽象メソッドとして宣言しました。 Shape オブジェクトをインスタンス化することはできませんが、例 6.13 のように、継承したり式で使用したりすることはできます。
抽象メソッドのみを含むクラスを作成する場合は、インターフェイスを定義します。この状況を説明するために、PHP にはインターフェースおよび実装キーワードがあります。抽象クラスの代わりにインターフェイスを使用し、extends の代わりに実装を使用してクラス定義を記述することも、たとえば、myClass を実装して myIterface を実装することもできます。個人の好みに応じて、これら 2 つのメソッドのどちらかを選択できます。
/*注:
2 つのメソッドは次のことを指します:
1. 抽象クラス aaa{} (aaa には抽象メソッドのみがあり、一般メソッドはないことに注意してください)
class bbb extends aaa{} (bbb では bbb の aaa の抽象メソッドを上書きします)
2. インターフェース aaa{}
クラス bbb は aaa{} を実装します (bbb の aaa の抽象メソッドを上書きします)
*/
リスト 6.13 抽象クラス
//抽象ルートクラス 抽象ルートクラス
抽象クラス Shape
{
abstract function getArea(); //抽象メソッドを定義します
}
//抽象子クラス 抽象サブクラス
抽象クラス Polygon extends Shape //Polygon
{
抽象関数 getNumberOfSides()
}
//具体的なクラス エンティティ クラス トライアングル クラス
クラス Triangle extends Polygon
{
public $base;
public $height;
{
return(($this->base * $this->height)/2)
}
{
return(3)
}
}
クラス Rectangle extends Polygon
{
public $width;
public $height;
public function getArea()
return($this->width * $this->height)
}
パブリック関数 getNumberOfSides()
return(4)
}
}
//具象クラス エンティティ クラス サークル
{
public $radius
public function getArea()
return(pi() * $this->radius * $this->radius)
}
}
//具体的なルートクラスはカラークラスを定義します。
{
public $name
}
$myCollection = array(); // シェイプのコレクションを作成し、配列に入れます
// 長方形を作成します
$r = new Rectangle;$r->height = 7;
$myCollection[] = $r;
設定を解除($r)
// 三角形を作成します
$t = new Triangle;
設定を解除($t)
// 円を作成します
$c = new Circle;
$myCollection[] = $c;
>
$c = 新しい色;
$myCollection[] = $c;
foreach($myCollection as $s)
{
{
print("Area: " . $ s->getArea() .
}
if($s ポリゴンのインスタンス)
print("Sides: " .$s->getNumberOfSides()."n");
if($sinstanceofColor)
{
print("Color: $s->name n")
}
}
?>