
【PHP】オーバーライド – スーパークラスのメソッドをサブクラスで再定義する
クラスの継承ではオーバーライドと呼ばれる仕組みがあります。
オーバーライドはサブクラスでスーパークラスのメソッドを再定義することができます。
ここではオーバーライドについて解説します。
-
オーバーライド
オーバーライドとは
オーバーライドはサブクラスでスーパークラスのメソッドを再定義することです。
スーパークラスのメソッドの意味合いは同じだけど、処理が異なる場合などに使用します。
基本構文
オーバーライドはスーパークラスのメソッドと同じ名前、同じ引数のメソッドをサブクラスで定義します。
class サブクラス名 extends スーパークラス名 {
アクセス修飾子 function メソッド名( $引数名 ) {
// 処理・・・・・・・
return $変数名または値;
}
}
サンプルコード
オーバーライドを使ったサンプルコードをご覧ください。
<?php
// クラス(サブクラス)
class Person {
// 名前
public $name = 'Watanabe You';
// プロフィールを出力する
public function profile() {
echo "名前 : ".$this->name."\n";
}
}
// クラス(スーパークラス)
class Teacher extends Person {
// 担当科目
public $subject = '体育';
// 教師プロフィールを出力する
public function profile() {
echo $this->subject."教師 : ".$this->name."\n";
}
}
// インスタンスの生成
$watanabe = new Teacher();
// プロフィールを出力
$watanabe->profile();
?>
体育教師 : Watanabe You
このコードの概要は次のようになります。
行数 | 内容 |
3〜14 | Personクラスの定義。 |
16~27 | Teacherクラスの定義(Personクラスを継承)。 |
30 | Teacherクラスのインスタンスを生成し、$watanabeに代入。 |
33 | $watanabeのprofileメソッドを呼び出し。 |
Personクラスでprofileメソッド定義しており、Teacherクラスでもprofileメソッドを定義しています。
このようにスーパークラスのメソッド(メソッド名・引数)と同じメソッドをサブクラスで定義することで、オーバーライドすることができます。
実行結果からTeacherクラスのメソッドが実行されていることが分かります。
演習問題
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 下記表の3つのクラスを作成する
- 実行結果になるように各クラスのインスタンスを使う
クラス | 英記 | 継承元 | フィールド | メソッド |
---|---|---|---|---|
チケットクラス | Ticket |
なし | ・$price (料金) |
・info()
→ $ の値を出力 |
ライブチケット | LiveTicket |
Ticket |
・$place (場所) |
・info()
→ 場所と料金を出力 |
ライブ配信チケット | LiveStreamingTicket |
Ticket |
・$url (URL) |
・info()
→ URLと料金を出力 |
===== チケット =====
料金 : 5000円
===== ライブチケット =====
料金 : 8000円
場所 : ライブハウス
===== ライブ配信 =====
料金 : 3000円
URL : https://it-hack.net/live-streaming
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 下記表の3つのクラスを作成する
- 実行結果になるように各クラスのインスタンスを使う
クラス | 英記 | 継承元 | フィールド | メソッド |
---|---|---|---|---|
車クラス | Car |
なし | ・$distance (移動距離)
※ 初期値は0 ・ $acceleration (加速度)
※ 初期値は60 |
・display_distance()
→ $distance の値を出力
・ run_distance()
→ 前進距離を計算 → 計算式は $acceleration * 1.0
・ run()
→ run_distance() で前進距離を取得し出力する。また、$distanceに前進距離を加算 |
スポーツカークラス | SportCar |
Car |
なし | ・run_distance()
→ 前進距離を計算 → 計算式は $acceleration * 1.2 |
ファミリーカークラス | FamilyCar |
Car |
なし | ・run_distance()
→ 前進距離を計算 → 計算式は $acceleration * 0.8 |
===== 車 =====
60km進みます。
60km進みます。
移動距離 : 120km
===== スポーツカー =====
72km進みます。
72km進みます。
移動距離 : 144km
===== ファミリーカー =====
48km進みます。
48km進みます。
移動距離 : 96km
まとめ
オーバーライドはサブクラスでスーパークラスのメソッドを再定義する方法です。
プログラミングでは暫し使われる方法なので、覚えていきましょう。