ITHACK
~ みんなのIT部門 ~

【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キーワードを使ってスーパークラスのメソッドを呼び出しており、実行結果から正常に動作していることが分かります。

演習問題

問題1

次の実行結果になる会計プログラムを作成してください。
なお、下記条件を満たすものとします。

  • 小計クラス(Subtotal)を作成する
  • 小計クラスは複数料金を記憶する$pricesフィールド(配列)を持つ
  • 小計クラスは小計金額を計算するcalcメソッドを持つ(小計金額は$pricesに記憶された値の合計値)
  • 会計クラス(Bill)を作成する
  • 会計クラスは小計クラスを継承する
  • 会計クラスはcalcメソッドをオーバーライドし、小計に消費税を加算した値を計算する。
    ※ 消費税率は10%とします。
  • 会計クラスのcalcメソッドは小計クラスのcalcメソッドを使う
  • 料金は標準入力で与える(空文字を入力するまで)
$ php practice.php
1000
2300
3500

合計金額 : 7480円

問題2

次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 下記表の3つのクラスを作成する
  • 実行結果になるように各クラスのインスタンスを使う
クラス 英記 継承元 フィールド メソッド
チケットクラス Ticket なし $price(料金) info()
→ $priceの値を出力
ライブチケット LiveTicket Ticket $place(場所) info()
→ 場所と料金を出力
※ スーパークラスのinfoメソッドを利用する
ライブ配信チケット LiveStreamingTicket Ticket $url(URL) info()
→ URLと料金を出力
※ スーパークラスのinfoメソッドを利用する
===== チケット    =====
料金 : 5000円
===== ライブチケット =====
料金 : 8000円
場所 : ライブハウス
===== ライブ配信   =====
料金 : 3000円
URL : https://it-hack.net/live-streaming

まとめ

parentキーワードはスーパークラスを表すキーワードです。
スーパークラスのメソッドを呼び出す時に使われ、特にオーバーライドしたメソッドで使われることが多くあります。