ホームページ  >  記事  >  バックエンド開発  >  オブジェクト指向PHPのFinalキーワードの詳しい説明(コード例)

オブジェクト指向PHPのFinalキーワードの詳しい説明(コード例)

易达
易达オリジナル
2020-05-25 16:31:322207ブラウズ

この記事の目的:

1. PHP における Final キーワードの定義を理解する

2. PHP における Final キーワードの役割を理解する

3. PHP での Final キーワードを理解する キーワード使用シナリオ

4. PHP での Final キーワードの具体的な実装をマスターする

これまでの一貫した考え方を踏襲しつつ、3W1H メソッドを通じて学習していきます。理解しましょう

(1) PHP の Final キーワードの定義を理解する (何を)

クラスの前に Final を付けると、このクラスは継承できません。

(2) PHP における Final キーワードの役割を理解する (理由)

主な機能は 2 点です。

1 . クラスの継承を防ぐ

2. クラスメソッドのオーバーライドを防ぐ

(3) PHP の Final キーワードの使用シナリオを理解する (Where)

クラス サブクラスがない場合、またはクラスのメソッドをオーバーライドできない場合は、final 実装の使用を検討できます

(4) PHP で Final キーワードの具体的な実装をマスターする (方法)

概要:

1. 最終クラスの定義形式は次のとおりです: 最終クラス クラス名 {}

2. 最終クラスの概念があるのは PHP5 だけであることに特に注意してください。キーワード。この概念は PHP5 以前には存在しませんでした

3。最終メソッドの定義形式は次のとおりです: 最終パブリック (または保護された) 関数のメソッド名 (パラメーター...){}

4クラスが最終クラスとして定義されると、継承することはできません。つまり、サブクラスを持つことはできません

5. メソッドが最終メソッドとして定義されると、サブクラスによってオーバーライドすることはできません

すべての要約は実践に基づいています。したがって、次は、

を自信を持って使用できるように、それを 1 つずつ証明する必要があります (5)、具体的なコード

1、ケース 1:

実践的な目標:

1. 最終クラスの定義形式は次のとおりです: 最終クラス クラス名 {}

<?php
//定义“人”类
final class Human{
    public function eat(){
        echo "Human 中的eat方法被执行了<br/>";
    }
}

$human = new Human();
$human->eat();
?>

The操作結果:

Human is Executed の Eat メソッド

2. ケース 2:

実用的な目標:

1最終メソッドの定義形式は次のとおりです: Final public (または protected) function メソッド名 (パラメータ...){}

<?php
class Human{
    final public function eat(){
        echo "Human 中的 类型为final的eat方法被执行了<br/>";
    }
}
$human = new Human();
$human->eat();
?>

演算結果は次のとおりです:

最後の Eat メソッド人間が実行される

3. ケース 3:

実践的な目標:

1. クラスが最終クラスとして定義されると、それを最終クラスとして定義することはできません。継承、つまりサブクラスを持つことはできません

<?php
//定义“人”类
final class Human{
    public function eat(){
        echo "Human 中的 类型为final的eat方法被执行了<br/>";
    }
}

//定义Nba球员类
class NbaPlayer extends Human{
    public function eat(){
        
    }
}
?>

実行結果は次のとおりです:

致命的エラー: クラス NbaPlayer は D:\E-class\class の最終クラス (Human) から継承できません-code\classing\index.php 14 行目

4. ケース 4:

実際的な目標:

1. 1 回メソッドは最終メソッドとして定義されており、サブクラスによってオーバーライドすることはできません

<?php
//定义“人”类
class Human{
    final public function eat(){
        echo "Human 中的 类型为final的eat方法被执行了<br/>";
    }
}

//定义Nba球员类
class NbaPlayer extends Human{
    public function eat(){
        echo "NbaPlayer中的eat方法,重写了父类的eat方法<br/>";
    }
}
?>

実行結果は次のとおりです:

致命的エラー: D:\ の最終メソッド Human::eat() をオーバーライドできませんE-class\class-code\classing\index.php の 14 行目

(6) 学んだことを応用する

ここまでで、final について明確に理解できるはずです。学んだことを適用し、次の問題を解決するために学んだ知識を使用します 質問

質問: 長年の経験に基づいて、多くのデータ操作メソッドは実際に再利用できます。1 つのプロジェクトで使用されるだけでなく、これらは多くのプロジェクトで使用でき、プロジェクト内の多くの場所でも使用できます。再利用するため、これらの一般的なメソッドをクラスにカプセル化する予定ですが、このクラスにはサブクラスが必要ないため、サブクラスは必要ありません。内部のメソッドをオーバーライドするにはどうすればよいですか?

アイデア分析:

1. 一般的なデータ操作メソッドを含むクラスを作成します。

2. class は継承になるため、final の役割と組み合わせると、クラスを最終クラスとして定義できます。

3. クラスが最終クラスとして定義されると、内部のメソッドは当然オーバーライドされません。サブクラスがありません。サブクラスで書き直すにはどうすればよいですか?

具体的なコードは次のとおりです:

<?php
final class MyDataOpClass{
    public function abs(){
        //求绝对值
    }
    //产生随机数
    public function rand(){
        echo "产生随机数方法";
    }
    //获取数组中的最大值
    public function getMax($numArr){
        
    }
    //获取数组中的最小值
    public function getMin($numArr){

    }
    //其他方法就此省略
}
$mymath = new MyDataOpClass();
$mymath->rand();
?>

実行結果は次のとおりです:

乱数メソッドを生成する

説明: この例は少し単純ですが、誰もが自分のアイデアの分析に注意を払い、できるだけ正確かつ明確になることを願っています

#概要:

1. この記事の主な内容 Final の定義と機能、および具体的な実装について説明しました

この記事が少しでもお役に立てれば幸いです。皆さん、ありがとうございました! ! !

以上がオブジェクト指向PHPのFinalキーワードの詳しい説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。