《PHP8上級試験対策》finalキーワードの正しい挙動とエラー例

  • URLをコピーしました!

はじめに

PHP では final キーワードを使うことで「これ以上の拡張ができない」状態を指定できます。クラスやメソッドに対して利用でき、試験でも頻出のポイントです。本記事では final の挙動を実際のコードとともに解説し、誤答しやすいポイントを整理します。

キーワード: final / 継承禁止 / オーバーライド禁止 / クラス設計

目次

final の意味

final は「もうここで止める」という意味を持ちます。

  • クラスにつける → そのクラスを継承できない
  • メソッドにつける → サブクラスからオーバーライドできない

クラスに final をつけた場合

<?php
declare(strict_types=1);
error_reporting(-1);

final class Hoge {
}

class Foo extends Hoge {
}

実行結果:

Fatal error: Class Foo may not inherit from final class (Hoge)

✅ これは 正しい動作 です。final class Hoge は「継承禁止」なので、Foo extends Hoge はエラーになります。

アスキーアート図解(final クラス)

   [final Hogeクラス]
        │
        ▼
   [Fooクラス]   ← ❌ エラー!

「これ以上子クラスは作れない」というイメージです。

メソッドに final をつけた場合

class Base {
    final public function greet() {
        echo "Hello";
    }
}

class Child extends Base {
    // オーバーライドしようとするとエラー
    public function greet() {
        echo "Hi";
    }
}

実行結果:

Fatal error: Cannot override final method Base::greet()

こちらも final の仕様どおりで、オーバーライドは禁止です。

アスキーアート図解(final メソッド)

   [Baseクラス]
       greet() ← final指定
        │
        ▼
   [Childクラス]
       greet() ← ❌ 上書き禁止!

呼び出しは可能ですが、オーバーライドは禁止です。

誤答パターンと試験対策

  • 誤答しがち:「final クラスはインスタンス化できない」→ ❌(できます。禁止されるのは継承だけ)
  • 誤答しがち:「final メソッドは呼び出せない」→ ❌(呼び出しは可能。禁止されるのはオーバーライドだけ)

👉 試験では「何ができなくなるのか?」を正確に区別して覚えることが大切です。

まとめ

  • final class → 継承禁止
  • final method → オーバーライド禁止
  • エラーになるのは 仕様どおり であり、問題文の説明は正しい。

final は“止める”キーワード」と覚えておくと、試験で混乱しません。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次