親メソッドを呼ぶ (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を書く