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