クラスのメンバーまたはメソッドを static として宣言すると、クラスのインスタンス化を必要とせずにアクセスできるようになります。
static として宣言したメンバーは、インスタンス化されたクラス オブジェクトではアクセスできません (ただし、static メソッドは呼び出すことができます)。クラスオブジェクトをインスタンス化せずにそれらを実行します。静的クラスはクラス オブジェクトから呼び出すことはできません。 (クラスの静的メソッドは問題ありません)。 //最初の例では、静的変数が非静的メソッドで呼び出されていることに注意してください。唯一の違いは、self の使用です。 self を使用することは可能ですか????わかりません???テストが必要です。
PHP4 との互換性のために、static 宣言は可視性宣言の後になければなりません。可視性宣言が使用されない場合、メンバーまたはメソッドは public として宣言されているかのように扱われます。
static 宣言は明示的宣言である必要があります。 PHP4との互換性を保つため、明示的に宣言されたオブジェクトやメソッドがない場合は、publicとして宣言されたものとみなされます。
静的メソッドはオブジェクトのインスタンスを作成しなくても呼び出すことができるため、静的として宣言されたメソッド内では疑似変数 $this を使用できません。
静的メソッドは呼び出すためにクラス オブジェクトをインスタンス化する必要がないため、疑似変数 $this は使用できません。静的メソッドでは使用できません。実際、静的メソッドの呼び出しはコンパイル時に解決されます。明示的なクラス名を使用すると、メソッドはすでに完全に識別されており、呼び出しが self によって行われる場合、self は現在のクラスに変換されます。コードが属するクラス。ここでも継承規則は適用されません。実際には、静的メソッドの呼び出しはコンパイル時に決定されます。 (この段落の翻訳方法がわかりません。???わかりません???)
私が長い間求めていた翻訳は次のとおりです:
--------- ------------- ------------------------
実際には、静的メソッドの呼び出しはコンパイル時に解決されます。時間。明示的なクラス名を使用すると、メソッドは継承ルールを適用しなくても完全に認識されます。単独で呼び出された場合、それ自体が現在のクラス (コードが属するクラス) に解決されます。ここでも継承ルールは適用されません。
しかし、新たな質問:
ここには継承がないかもしれないのに、なぜ継承ルールが記載されているのでしょうか? (???理解できません???)
矢印演算子 -> を使用してオブジェクトを通じて静的プロパティにアクセスすることはできません。非静的メソッドを静的に呼び出すと、E_STRICT レベルの警告が生成されます。
静的メンバーは、矢印記号 -> を使用してクラスのオブジェクトから呼び出すことはできません。非静的メソッドを静的に呼び出すと、E_STRICT レベルの警告が発生します。
静的メンバーの例:
コードをコピー
http://www.bkjia.com/PHPjc/317402.html