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