【PHP】スーパークラスのメソッドを呼び出す(parent) – サブクラスからスーパークラスを使う方法を解説

サブクラスからスーパークラスのメソッドを使う方法があります。

ここでは初心者向けにその方法について解説します。

★ 目的

  • サブクラスからスーパークラスのメソッドの使い方を理解する。
  • サブクラスからスーパークラスのメソッドの使えるようになる。

スーパークラスのメソッドの呼び出し

クラス継承ではサブクラスからスーパークラスのメソッドを呼び出すことができます。

この方法は主にオーバーライドを使用したクラスで使われることが多く、クラス継承では必要不可欠な知識となります。

オーバーライドについては次の記事をご覧ください。

基本構文

スーパークラスのメソッドを呼び出す基本構文は次のようになります。

parent::メソッド名()

この記述はサブクラスのメソッドで記述します。

サンプルコード

スーパークラスのメソッドを呼び出すサンプルコードをご覧ください。

ソースコード

<?php

// クラス定義(サブクラス)
class Person {
    
    // 名前
    public $name = 'Watanabe You';
    
    // プロフィールを出力する
    public function profile() {
        echo "名前 : ".$this->name."\n";
    }
    
}

// クラス定義(スーパークラス)
class Teacher extends Person {
    
    // 担当科目
    public $subject = '体育';
    
    // 教師プロフィールを出力する
    public function profile() {
        parent::profile();
        echo "科目 : ".$this->subject."\n";
    }
    
}

// インスタンスの生成
$watanabe = new Teacher();

// プロフィールを出力
$watanabe->profile();

?>

実行結果

名前 : Watanabe You
科目 : 体育

体育教師のプロフィールを出力するプログラムのソースコードです。

各コードの概要は次のようになります。

行数概要
4〜14Personクラスの定義。
17〜28Teacherクラスの定義。(Personクラスを継承)
31Teacherクラスのインスタンスを生成し、$watanabeに代入。
34$watanabeのprofileメソッドを呼び出し。

Teacherクラスでスーパークラス(Personクラス)のprofileメソッドをオーバーライドしています。

このprofileメソッド内の24行目がスーパークラスのメソッドを呼び出す記述です。

実行結果からスーパークラスのメソッドが呼び出され、実行されていることが分かります。

コンストラクタでの使用

コンストラクタでも同じように記述できます。

先ほどのサンプルコードでコンストラクタを実装したバージョンをご覧ください。

ソースコード

<?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
科目 : 体育

Teacherクラスでコンストラクタ(__construct)をオーバーライドし、parentでスーパークラスのコンストラクタを呼び出しています。

実行結果から正常に実行できていることが確認できます。

まとめ

サブクラスからスーパークラスのメソッドを呼び出す場合、『parent::メソッド名()』を記述します。

この方法はよく使われ、必要な知識になることが多いので、習得していきましょう。