採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

親メソッドを呼ぶ (parent::)

テクノロジ系 / class-advanced (継承 / オーバーライド / abstract / interface / static / const / final)

親メソッドを呼ぶ (parent::)

Lesson 9 / Chapter 3

オーバーライドすると、親の処理は消える

<?php
class Greeter {
    public function greet() {
        echo "こんにちは\n";
    }
}

class FormalGreeter extends Greeter {
    public function greet() {
        echo "本日はお世話になります\n";
    }
}
  • 子で greet() を書くと、親の「こんにちは」は出ない
  • でも「親の挨拶 + 自分の追加」をしたいときがある

parent::method() で親を呼べる

<?php
class FormalGreeter extends Greeter {
    public function greet() {
        parent::greet();   // 親の greet() を呼ぶ
        echo "本日はお世話になります\n";
    }
}
  • parent:: は「親クラスの」という意味
  • parent::greet()親で定義された greet() を実行できる

子のインスタンスから呼んでみる

<?php
$g = new FormalGreeter();
$g->greet();

実行結果:

こんにちは
本日はお世話になります
  • 親の処理が先、その後に子の追加処理
  • 順番は自由 (子の処理 → 親、でも良い)

「親の処理を残しつつ拡張」する典型パターン

<?php
class Logger {
    public function log(string $msg) {
        echo "[LOG] $msg\n";
    }
}

class TimedLogger extends Logger {
    public function log(string $msg) {
        echo "[2026-05-18] ";
        parent::log($msg);   // 親の処理を再利用
    }
}
  • 親の log を書き直さずに済む
  • 親が変わっても、自動的に追従する

このチャプターでできるようになること

parent::method() で親メソッドを呼べる

✅ オーバーライド + 親処理の合成ができる

✅ 親の処理を捨てずに拡張する書き方ができる

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 01 — parent::greet() を呼ぶ

問題

Greeter クラスを定義してください。

  • メソッド greet()"こんにちは" を 1 行出力する

Greeter を継承した FormalGreeter クラスを定義してください。

  • greet() をオーバーライドし、まず parent::greet() を呼んでから

"本日はお世話になります" を 1 行出力する

FormalGreeter のインスタンスを作って greet() を呼んでください。

期待される出力:

こんにちは
本日はお世話になります

採点

php scripts/grade.php topics/class-advanced/ch03-parent-call/drill/01-call-parent/

ヒント

  • parent::greet(); で親の処理を呼べる
  • その後に追加の echo を書く