概要

オーバーライドした子メソッドの中から 親の処理も走らせたい ときがある。例えば子の greet() で「親の挨拶を出した後に、子独自のメッセージを追加する」ような合成だ。このために PHP には parent::method() という記法があり、子のメソッド内から親クラスのメソッドを明示的に呼び出せる。parent::greet(); を実行すると、いま自分が動いているクラスの 親の同名メソッド が呼ばれる。

parent::「親を捨てずに拡張する」 ためのキーで、特に コンストラクタの連鎖 で重要になる。親クラスが __construct(string $name) で何かを初期化しているなら、子クラスのコンストラクタの最初の行で parent::__construct($name); を呼んでおかないと、親側の初期化が走らずプロパティが未初期化のまま残ってしまう。「子コンストラクタの先頭で parent::__construct() を呼ぶ」は実務で頻出する慣習になる。

$this->method()parent::method() の違いを区別しておく。$this->method() はオーバーライドを考慮して 実体のクラスのメソッド を呼ぶ (子で上書きされていれば子が走る)。parent::method() は明示的に 親のメソッド を呼ぶ。同じ名前で書ける場合でも、意図がまったく違うので使い分けに注意する。

学習目標

ドリル

no 内容
01 子クラスの greet()parent::greet() を呼んで合成する

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

問題

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

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

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

期待される出力:

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

ヒント

この章を AI に聞く

  1. 「ch03 — 親メソッドを呼ぶ (parent::)」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch03 — 親メソッドを呼ぶ (parent::)」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch03 — 親メソッドを呼ぶ (parent::)」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch03 — 親メソッドを呼ぶ (parent::)」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE