PHPのfinalクラスとfinalメソッドを説明します。
最後のキーワードは、オブジェクト指向プログラミングの概念に関連するPHP5によって導入されました。
ただし、決勝に進む前に、継承の概念を十分に理解していることを確認する必要があります。継承では、別のクラスからクラスを継承できます。また、継承されたクラスの関数をオーバーライドして、最初に提供された動作を置き換えることもできます。場合によっては、クラスが継承されないようにする必要がある場合や、関数がオーバーライドされないようにする必要がある場合があります。これは、クラスと関数の前にfinalキーワードを付けることで、finalで実現できます。これにより、誰かがfinalクラスを拡張したり、final関数をオーバーライドしたりしようとすると、基本的にPHPでエラーが発生します。
注:
最後のキーワードは、メソッドとクラスでのみ使用できます。
以下の例を使用して、概念を示しましょう。
例:
親クラス関数をオーバーライドすることはできません。
<?php class BaseClass{ final function calculate($val1,$val2){ $sum = $val1+$val2; echo "Sum of given no=".$sum; } } class ChildClass extends BaseClass{ function calculate($x,$y){ $mult=$val1*$val2; echo "Multiplication of given no=".$mult; } } $obj= new ChildClass(); $obj->show(10,10); ?>
出力:
PHP Fatal error: Cannot override final method BaseClass::calculate()
説明:
上記の例では、親クラスであるクラスBaseClassです。ここで、calculateメソッドはfinalとしてマークされています。これは、どの子クラスでもshowメソッドをオーバーライドできないことを意味します。エラーを特定するために、ChildClassは最終的なメソッドshow()を定義しようとしています。これは致命的なエラーを生成します。これは、親クラスの最終メソッドをその子クラスで定義できないことを意味します。
例:
クラスの前に「Final」キーワードを利用する
<?php final Class BaseClass{ function printData($val1,$val2){ $add=$val1+$val2; echo "Sum of given no=".$s; } } class Child extends BaseClass{ function printData($val1,$val2){ $m=$val1*$val2; echo "Multiplication of given no=".$m; } } $obj= new Child(); $obj->printData(20,20); ?>
出力:
PHP Fatal error: Class Child may not inherit from final class (BaseClass)
説明:
上記の例では、クラスBaseClassがfinalで定義しているため、このクラスを拡張することはできません。クラスChildがBaseClassから拡張しようとしたとき(これは、ChildがBaseClassの子クラスであることを意味します)。この状況では、PHPは「クラスの子は最終クラス(BaseClass)から継承できない可能性があります」というエラーメッセージをスローします。これは、BaseClassの子クラスの作成を許可しないことを意味します。
-
Javaでの静的と最終の違い
この投稿では、Javaの「static」キーワードと「final」キーワードの違いを理解します。 静的 ネストされた静的クラス、変数、メソッド、およびブロックに適用できます。 宣言時に静的変数を初期化する必要はありません。 この変数は再初期化できます。 クラスの静的メンバーにのみアクセスできます。 他の静的メソッドでのみ呼び出すことができます。 静的クラスのオブジェクトは作成できません。 静的クラスには静的メンバーのみを含めることができます。 静的変数を初期化するために使用されます。 最終 キーワードです。 クラス、メソッド、変数
-
Pythonクラスのメソッドチェーンについて説明する
メソッドチェーン メソッドチェーンは、オブジェクト参照を1回だけ使用して、同じオブジェクトに対して複数のメソッド呼び出しを行うために使用される手法です。例- barとbazの2つのメソッドを持つクラスFooがあると仮定します。 クラスFoo-のインスタンスを作成します foo = Foo() メソッドチェーンなしで、オブジェクトfooでbarとbazの両方を呼び出すには、これを行います- foo.bar() foo.baz() メソッドチェーンを使用して、これを行います- オブジェクトfooのメソッドbar()とbaz()の両方へのチェーン呼び出し。 foo.bar().baz() 例