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