PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのfinalキーワードとは?メソッドとクラスでの使い方を解説

PHPのfinalキーワードは、メソッドやクラスに対して指定できる修飾子です。メソッドにfinalを付けるとサブクラスによるオーバーライド(上書き)が禁止され、クラスに付けるとそのクラスは継承できなくなります。これにより、開発者の意図しない改変からコード設計を守ることができます。

finalメソッドの例

まずは、メソッドにfinalキーワードを付けた例を見てみましょう。以下のコードでは、Baseクラスのdisplay()メソッドがfinalとして宣言されています。

<?php
    class Base {
        final function display() {
            echo "Base class function declared final!";
        }
        function demo() {
            echo "Base class function!";
        }
    }
    class Derived extends Base {
        function demo() {
            echo "Derived class function!";
        }
    }
    $ob = new Derived;
    $ob->demo();
?>

出力結果

このコードを実行すると、以下の出力が得られます。

Derived class function!

この例では、final宣言されているのはdisplay()メソッドのみであり、実際にオーバーライドしているのはfinalではないdemo()メソッドだけです。そのためエラーは発生せず、プログラムは正常に動作します。

finalクラスの例

次に、クラス自体にfinalキーワードを付けた場合の例を見てみましょう。

<?php
    final class Base {
        final function display() {
            echo "Base class function declared final!";
        }
        function demo() {
            echo "Base class function!";
        }
    }
    class Derived extends Base {
        function demo() {
            echo "Derived class function!";
        }
    }
    $ob = new Derived;
    $ob->demo();
?>

出力結果

今度はfinalクラスであるBaseを継承しようとしたため、実行時に致命的なエラー(Fatal Error)が発生します。

PHP Fatal error: Class Derived may not inherit from final class (Base) in /home/cg/root/6985034/main.php on line 19

まとめ

finalキーワードの役割は以下の2点にまとめられます。

  • メソッドに付けた場合 … サブクラスによるメソッドのオーバーライドを禁止する
  • クラスに付けた場合 … クラスの継承自体を禁止する

ライブラリやフレームワークの開発では、外部コードによる予期しない拡張や変更を防ぐ目的で、finalキーワードがよく活用されています。ただし、使いすぎるとテストや拡張の柔軟性が損なわれることもあるため、設計意図に応じて適切に使用することが大切です。

  1. Javaのfinalクラスとは?継承を禁止する仕組みと使い方を徹底解説

    Javaにおいて、クラスにfinal修飾子を付けて宣言する最大の目的は、そのクラスがサブクラス化(継承)されることを防ぐことです。クラスがfinalとして宣言されると、どのクラスもそのクラスを継承できなくなり、finalクラスの機能や振る舞いを拡張・変更することが不可能になります。finalクラスの基本構文finalクラスの宣言は非常にシンプルです。クラス名の前にfinalキーワードを付けるだけです。public final class Test { // クラスの本体 }このように宣言されたTestクラスに対して、以下のような継承を試みるとコンパイルエラーが発生します。// コンパイ

  2. Javaのfinalキーワードとは?変数・メソッド・クラスでの使い方を解説

    finalは、Javaにおける非アクセス修飾子のひとつです。クラス、メソッド、変数の実装を「確定」させるために使用され、これらが後から変更されることを防ぐ役割を持ちます。本記事では、finalキーワードの基本的な概念と、変数・メソッド・クラスそれぞれでの使い方をコード例とともに解説します。final変数final変数は、明示的に初期化できるのは一度だけです。また、finalで宣言された参照変数は、別のオブジェクトを参照するように再代入することはできません。ただし、オブジェクト内部のデータ自体は変更可能です。つまり、オブジェクトの「状態」は変えられるものの、「参照先」は変えられないという点に注意