
【PHP】抽象クラス(abstract) – 継承を前提としたクラス
PHPには抽象クラスと呼ばれる仕組みがあります。
抽象クラスは継承を前提としたクラスで、オブジェクト指向プログラミングで使うことがあります。
ここでは抽象クラスについて解説します。
-
抽象クラス
抽象クラスとは
抽象クラスは継承されることを前提としたクラスです。
直接インスタンスを生成することはできません。
また、抽象クラスに対して、インスタンスを生成できるクラスを具象クラスと呼びます。
基本構文
抽象クラスの基本構文は次のようになります。
abstract class クラス名 {
// クラス定数・クラス変数・クラスメソッド
// フィールド・メソッド
}
クラス定義のclass
の前にabstract
を付けることで抽象クラスとなります。
抽象クラスは具象クラスと同様にクラス定数やクラス変数、クラスメソッド、フィールド、メソッドを定義することができます。
サンプルコード
抽象クラスを使用したサンプルコードをご覧ください。
<?php
abstract class Person {
public $name;
public function __construct( $name ) {
$this->name = $name;
}
}
class Teacher extends Person {
public $subject;
public function __construct( $name, $subject ) {
parent::__construct($name);
$this->subject = $subject;
}
public function profile() {
echo $this->subject."教師 : ".$this->name."\n";
}
}
$watanabe = new Teacher('Watanabe You', '体育');
$watanabe->profile();
?>
体育教師 : Watanabe You
抽象クラスであるPersonクラスを定義し、Teacherクラスで継承しています。
Teacherクラスからインスタンスの生成ができるため、28行目以降でインスタンス生成やメソッドの呼び出しをおこなっています。
もし、Personクラスからインスタンスを生成しようとして、new Person()
と記述するとエラーになるので注意しましょう。
演習問題
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 下記表の3つのクラスを作成する
- 実行結果になるように各クラスのインスタンスを使う
クラス | 英記 | 継承元 | フィールド | メソッド |
---|---|---|---|---|
乗り物クラス
(抽象クラス) |
Vehicle |
なし | ・$distance (移動距離)
※ 初期値は0 |
・move()
→ "移動します。" を出力し、$distance の値を20加算する。
・ display_distance()
→ $distance の値を出力 |
車クラス | Car |
Vehicle |
なし | ・run()
→ "走行します。" を出力し、$distance の値を50加算する。 |
飛行機クラス | Airplane |
Vehicle |
なし | ・fly()
→ "飛行します。" を出力し、$distance の値を50加算する。 |
===== 車クラス =====
走行します。
走行します。
移動距離 : 100km
===== 飛行機クラス =====
飛行します。
飛行します。
飛行します。
移動距離 : 2400km
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 下記表の3つのクラスを作成する
- 実行結果になるように各クラスのインスタンスを使う
クラス | 英記 | 継承元 | フィールド | メソッド |
---|---|---|---|---|
チケットクラス
(抽象クラス) |
Ticket |
なし | ・$price (料金) |
・display_price()
→ $ の値を出力 |
ライブチケット | LiveTicket |
Ticket |
・$place (場所) |
・info()
→ 場所と料金を出力 ※ 料金の出力は display_price() を使う |
ライブ配信チケット | LiveStreamingTicket |
Ticket |
・$url (URL) |
・info()
→ URLと料金を出力 ※ 料金の出力は display_price() を使う |
===== ライブチケットクラス =====
場所 : ライブハウス
料金 : 8000円
===== ライブ配信クラス =====
URL : https://it-hack.net/live-streaming
料金 : 3000円
まとめ
抽象クラスは継承されることを前提としたクラスです。
メリットやデメリットを理解するには設計やオブジェクト指向プログラミングと呼ばれる考え方の知識が必要となりますが、先ずはプログラミング上での使い方を覚えていきましょう。