
【PHP】parent – スーパークラスのメソッド呼び出し
スーパークラスを表すparentキーワードがあります。
parentキーワードを使うことで、サブクラスからスーパークラスのメソッドを呼び出すことができます。
ここではparentキーワードについて解説します。
-
parentキーワード
parentキーワードとは
parentキーワードはスーパークラスを表すキーワードです。
サブクラスで使うことができ、スーパークラスのメソッドを呼び出すことができます。
オーバーライドしたメソッドで、スーパークラスの内容を引き継ぎたい場合に使われることが多くあります。
なお、オーバーライドについては次の記事をご覧ください。
基本構文
parentキーワードを使ったスーパークラスのメソッドを呼び出す基本構文は次のようになります。
parent::メソッド名()
サンプルコード
parentキーワードを使ったサンプルコードをご覧ください。
<?php
// クラス
class Person {
// 名前
public $name;
// コンストラクタ
public function __construct( $name ) {
$this->name = $name;
}
// プロフィールを出力する
public function profile() {
echo "名前 : ".$this->name."\n";
}
}
// クラス
class Teacher extends Person {
// 担当科目
public $subject;
// コンストラクタ
public function __construct( $name, $subject ) {
parent::__construct($name);
$this->subject = $subject;
}
// 教師プロフィールを出力する
public function profile() {
parent::profile();
echo "科目 : ".$this->subject."\n";
}
}
// インスタンスの生成
$watanabe = new Teacher('Watanabe You', '体育');
// プロフィールを出力
$watanabe->profile();
?>
名前 : Watanabe You
科目 : 体育
体育教師のプロフィールを出力するプログラムです。
各コードの概要は次のようになります。
行数 | 概要 |
---|---|
4〜19 | Personクラスの定義。 |
22〜39 | Teacherクラスの定義。(Personクラスを継承) |
42 | Teacherクラスのインスタンスを生成し、$watanabeに代入。 |
45 | $watanabeのprofileメソッドを呼び出し。 |
Teacherクラスでスーパークラス(Personクラス)のコンストラクタとprofileメソッドをオーバーライドしています。
29行目と35行目でparentキーワードを使ってスーパークラスのメソッドを呼び出しており、実行結果から正常に動作していることが分かります。
演習問題
次の実行結果になる会計プログラムを作成してください。
なお、下記条件を満たすものとします。
- 小計クラス(Subtotal)を作成する
- 小計クラスは複数料金を記憶する$pricesフィールド(配列)を持つ
- 小計クラスは小計金額を計算するcalcメソッドを持つ(小計金額は$pricesに記憶された値の合計値)
- 会計クラス(Bill)を作成する
- 会計クラスは小計クラスを継承する
- 会計クラスはcalcメソッドをオーバーライドし、小計に消費税を加算した値を計算する。
※ 消費税率は10%とします。 - 会計クラスのcalcメソッドは小計クラスのcalcメソッドを使う
- 料金は標準入力で与える(空文字を入力するまで)
$ php practice.php
1000
2300
3500
合計金額 : 7480円
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 下記表の3つのクラスを作成する
- 実行結果になるように各クラスのインスタンスを使う
クラス | 英記 | 継承元 | フィールド | メソッド |
---|---|---|---|---|
チケットクラス | Ticket |
なし | ・$price (料金) |
・info()
→ $ の値を出力 |
ライブチケット | LiveTicket |
Ticket |
・$place (場所) |
・info()
→ 場所と料金を出力 ※ スーパークラスのinfoメソッドを利用する |
ライブ配信チケット | LiveStreamingTicket |
Ticket |
・$url (URL) |
・info()
→ URLと料金を出力 ※ スーパークラスのinfoメソッドを利用する |
===== チケット =====
料金 : 5000円
===== ライブチケット =====
料金 : 8000円
場所 : ライブハウス
===== ライブ配信 =====
料金 : 3000円
URL : https://it-hack.net/live-streaming
まとめ
parentキーワードはスーパークラスを表すキーワードです。
スーパークラスのメソッドを呼び出す時に使われ、特にオーバーライドしたメソッドで使われることが多くあります。