ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクト指向でのfinal static constキーワードの使用
このキーワードはクラスとメソッドの定義にのみ使用できます。final は定数を意味するため、final は定義に使用できません。メンバーのプロパティ。
14. Final キーワードの適用
final は、define() を使用して定数を定義するため、クラスとメソッドの定義にのみ使用できます。関数なので、final をメンバー プロパティの定義に使用することはできません。
final キーでマークされたクラスは継承できません。
コード スニペット
final class Person{
… …
}
class Student extends Person{
}
次のエラーが表示されます:
致命的なエラー: Class Student は Final から継承できません。 class (Person)
final キーでマークされたメソッドはサブクラスによってオーバーライドできず、最終バージョンです。 ) {
}
}
次のエラーが発生します:
致命的なエラー: 最終メソッド Person::say() をオーバーライドできません
15. static キーワードと const キーワードの使用
static キーワードは、クラス内のメンバー プロパティとメンバー メソッドを記述します。静的として;静的メンバーの利点は何ですか?
先ほど人間を「人」と宣言しました。「人」クラスに「人が属する国」の属性を追加すると、それぞれ「人」クラスを使用してインスタンスを作成できます。オブジェクトは「属する国」という属性を持ちます。プロジェクトが中国人向けに開発されている場合、各オブジェクトは「中国」という属性を持ち、「国」という属性を作成すると、その国の属性は異なります。静的
メンバーの場合、メモリ内には国属性が 1 つだけ存在し、数百以上のオブジェクトがこの属性を共有できるようになります。静的メンバーはクラスに属し、どのオブジェクトにも属さないため、
静的メンバーは外部アクセスを制限できます。これは、クラスが初めてロードされるときに割り当てられる領域であり、他のクラスからはアクセスできず、クラスのメンバーをある程度まで保護できます。メモリの観点では、メモリは論理的に 4 つのセグメントに分割され、オブジェクトは「ヒープ メモリ」に配置され、オブジェクトの参照は「スタック メモリ」に配置されます。静的メンバーは、クラスが初めてロードされるときに配置される「初期化された静的セグメント」に配置されます。以下に示すように、ヒープ メモリ内のすべてのオブジェクトで共有できます。グローバル変数に非常に似ており、クラスのすべてのインスタンスで共有できます。これは、グローバル関数と同様に、クラス
の静的メソッドにも当てはまります。
コード スニペット
コードをコピーします
コードは次のとおりです:
class Person{
//以下は person の静的メンバー属性です
public static $my Country="China" ;
// var $name ; //個人の名前
//これは個人の静的メンバーメソッドです
public static function Say(){
echo "私は中国人です
"; //静的属性を出力する
echo Person::$my Country;
//静的メソッドにアクセスする
Person::say();
//静的プロパティを再割り当てする
person::$my Country echo Person: :$私の国 ?> ; //静的メソッドにアクセスする person::say(); 非静的メソッドで静的メンバーにアクセスすることは可能ですか? const は定数を定義するためのキーワードです。PHP で定数を定義するには "define()" 関数を使用しますが、 ;
静的メンバーはクラスが初めてロードされるときに作成されるため、クラス外のオブジェクトを必要とせずにクラス名を使用して静的メンバーにアクセスできます。前述したように、静的メンバーにはこのクラスのすべてのメンバーがアクセスします。インスタンスオブジェクトによって共有されている場合、オブジェクトを使用してクラス内の静的メンバーにアクセスできますか?上の図から、各オブジェクト内には静的メンバーが存在しないことがわかりますが、各オブジェクトは共有できるため、オブジェクトを使用してメンバーにアクセスする場合、そのような属性定義はなく、オブジェクト アクセスを使用します。静的メンバー、Java などの他のオブジェクト指向言語では、オブジェクトを使用して静的メンバーにアクセスできますが、PHP で静的メンバーにアクセスするためにオブジェクトを使用できる場合は、静的メンバーを使用しないようにする必要があります。プロジェクトでは、クラス名を使用してメンバーにアクセスすることが目的です。
クラス内の静的メソッドは、クラスの静的属性にのみアクセスできます。クラス内の静的メソッドは、クラスの非静的メンバーにはアクセスできません。理由は非常に簡単です。他のメンバーについては、参照 $this
を使用する必要があり、参照ポインター $this は、このメソッドを呼び出すオブジェクトを表します。静的メソッドはオブジェクト
を使用して呼び出されるのではなく、クラス名を使用してアクセスされると述べました。基本的に、オブジェクトが存在しない場合、$this への参照はありません。$this への参照がなければ、クラス内の非静的メンバーにはアクセスできません。したがって、クラス内の静的メンバーにはオブジェクトがなくてもアクセスできます。 $this が存在しないため、特別なクラス "self" を使用して静的メソッド内の他の静的メンバーにアクセスします。self が代表である点を除けば $this と似ています。この静的メソッドが配置されている場所。したがって、静的メソッドでは、メソッドが配置されているクラスの「クラス名」を使用することも、他の静的メンバーにアクセスするために「self」を使用することもできます。特別な事情がない場合、通常は後者を使用します。それは、「self::
メンバー属性」メソッドです。
コード スニペット
コードをコピーします
コードは次のとおりです:
class person{
//以下は person の静的メンバー属性です
public static $my Country="China" ;
//これは person 静的メンバー メソッドです。self を通じて他の静的メンバーにアクセスします。
クラス内で定数を定義するには "const" キーワードを使用します。これは C の # に似ています。プログラム内で値を変更するとエラーが発生します。constで変更したメンバプロパティもstaticで変更したメンバと同様にアクセスします。メソッド内でも「クラス名」を使用します。内部では「self」キーワードが使用されています。ただし、「$」
記号を使用する必要はなく、オブジェクトを使用してアクセスすることもできません。
コード スニペット
コードをコピーします
コードは次のとおりです:
class MyClass{
const constant = 'constant value'
function showConstant(); {
echo self ::constant . "n"; //アクセスには self を使用します。"$" は追加しません
}
echo MyClass::constant . "n"; "$" を追加
$ class = new MyClass();
$class->showConstant();