ホームページ >バックエンド開発 >PHPチュートリアル >セクション 10 抽象メソッドと抽象クラス [10]_PHP チュートリアル

セクション 10 抽象メソッドと抽象クラス [10]_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:10:45839ブラウズ


オブジェクト指向プログラムは、クラスの階層構造を通じて構築されます。PHP などの単一継承言語では、クラスの継承は 1 つ以上のサブクラスを持ち、各サブクラスは 1 つ以上の下位レベルを継承します。もちろん、適切に設計されたシステムでは、アプリケーション コードがルートで動作するように設計されている場合、各ルート クラスに便利なインターフェイスが必要です。

抽象メソッドは、サブクラス内のメソッドのような一般的なメソッドのプレースホルダーであり (スペースを消費しますが、機能しません)、通常のメソッドとは異なります。クラス内に 1 つ以上の抽象メソッドが存在する場合、そのクラスは抽象クラスをインスタンス化することができず、それからサブクラスをインスタンス化することもできます。

すべての抽象メソッドをオーバーライドすると、クラスに抽象メソッドが含まれている場合でも、サブクラスは通常のクラスになります。 1 つだけ)、class キーワードの前に abstract を追加して、クラスを抽象として宣言する必要があります。抽象メソッドを宣言する構文は、メソッドに含まれる本体部分が異なります。一般的なメソッドと同様に中括弧 {} を付け、セミコロンで終わります。

例 6.13 では、getArea メソッドを含むクラス Shape を定義しましたが、形状が分からないと形状の面積を決定することは不可能であるためです。そのため、getArea メソッドを抽象として宣言しました。Shape オブジェクトをインスタンス化することはできませんが、例 6.13 のように、それを継承したり、式で使用したりすることはできます。この状況を説明するために、PHP には、interface およびimplements キーワードがあり、extends の代わりに、クラス定義を記述したり、myIterface を実装したりすることができます。個人の好みに応じて 2 つのメソッドを選択できます。

/*注:
2 つのメソッドは以下を参照します。
1. 抽象クラス aaa{} (aaa には抽象メソッドのみがあり、一般的なメソッドはないことに注意してください)
class bbb extends aaa{} (bbb の aaa の抽象メソッドを上書きします)
2. インターフェース aaa{}
class bbb は aaa{} (bbb の aaa の抽象メソッドをオーバーライドします)
*/

リスト 6.13 抽象クラス
//抽象ルートクラス 抽象ルートクラス
抽象クラス Shape
{
抽象関数 getArea(); file://抽象メソッドを定義する
}

//抽象子クラス 抽象サブクラス
抽象クラス Polygon extends Shape file://Polygon
{
abstract function getNumberOfSides();

//concrete クラス エンティティ クラス 三角形クラス
class Triangle extends Polygon
{
public $height;

public function getArea ( ) file://面積計算メソッドをオーバーライドします
{
return(($this->base * $this->height)/2)
}

public function getNumberOfSides() file://override エッジカウントメソッド
{
return(3);
}
}

//具体的なクラス エンティティ クラス 四辺形
クラス Rectangle extends Polygon
{
public $height;

public function getArea()
return; ($this->width * $this->height);
}

public function getNumberOfSides()
{
return(4);

//具体的なクラス エンティティ クラス サークル
クラス Circle extendsシェイプ
{
public $radius;

public function getArea()
{
return(pi() * $this->radius * $this->radius)
}
}

/ /コンクリート ルート クラスカラークラスを定義します
class Color
{
public $name;
}

$myCollection = array() file://図形のコレクションを作成して配列に入れます

//四角形を作成します
$ r = 新しい四角形;
$r->高さ = 7;
$myCollection($r); = 新しい三角形;
$t->base = 4;
$myCollection[] = $t;
$ c = 新しい円;
$c->radius = 3;
$myCollection[] = $c;

//新しい色を作成します。 name = "blue";
$myCollection[] = $c;

foreach($s としての $s) file://if Shape クラスのインスタンス
{
print("Area: " . $s->getArea() .
"
n");
}

if($s instanceof Polygon)
{
print ( "サイド: " .
$s->getNumberOfSides() .
"
n")
}

if($s instanceof Color)
{
print("Color: $s-> name
n");
}

print("
n");
}

?>

www.bkjia.com本当http://www.bkjia.com/PHPjc/314128.html技術記事オブジェクト指向プログラムは、クラスの階層構造を通じて構築されます。PHP などの単一継承言語では、クラスの継承は 1 つ以上のサブクラスを持ち、各サブクラスから 1 つのクラスが継承されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。